mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-02 15:04:37 +01:00
v1.91.290.0 feat(harness): gstack registers its skills in whatever agent harness it is installed into (GSTA-135) (#3526)
* wip: gstack-harness registrar (GSTA-135) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * wip: harness registration in setup, uninstall, tests Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * wip: harness hosts experimental, troubleshooting codes, kit Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: agent harness registration (GSTA-135) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix: harness hosts run in place from the checkout in --status Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: bun-free ledger reader Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: CHANGELOG for harness registration (Unreleased) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(harness): keep edits beside themselves, never follow symlinks, cut only gstack's own context block Review blockers on #3526: uninstall deleted the edit backups under the state root; unregister followed a symlinked folder below the destination; a lone or edited context marker made the cut eat user lines; a re-register adding --context left an unrecorded block. Also: ledger written before the files, --refresh-registered no longer re-runs harness hosts through setup (gstack-harness refresh keeps their mode), bash goes through runBashSync, and setup tests follow openclaw/hermes becoming installs. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(harness): a ledger with no destination row touches nothing (no hang) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: harness registration in README, install and hosts (document-release audit) Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
This commit is contained in:
1 parent
a14c28aca7
commit
44f19d0106
28 files changed
+1549
-129
No files matched your search
@@ -125,12 +125,11 @@ export interface HostConfig {
|
||||
/** How skills are linked into the host dir. */
|
||||
linkingStrategy: 'real-dir-symlink' | 'symlink-generated';
|
||||
/**
|
||||
* Instruction-only fallback tier: a committed rules digest this host's
|
||||
* users can hand-copy when there is no full install arm. Delivery is
|
||||
* print-path + user-performed copy ONLY — setup must never write or
|
||||
* overwrite a user's own AGENTS.md. See scripts/gen-agents-digest.ts.
|
||||
* 'harness': setup's arm for this host is `gstack-harness register <host>`
|
||||
* (lib/harness-register.ts): the host's render copied into the harness's own
|
||||
* skills folder with an ownership ledger, not linked into a host skills dir.
|
||||
*/
|
||||
instructionTier?: { rulesFile: string };
|
||||
registration?: 'harness';
|
||||
};
|
||||
|
||||
// --- Host-Specific Behavioral Config ---
|
||||
@@ -189,8 +188,8 @@ export function validateHostConfig(config: HostConfig, validResolverNames?: Read
|
||||
if (!['native', 'prose'].includes(caps.questions)) errors.push(`capabilities.questions must be 'native' or 'prose'`);
|
||||
if (!['enforced', 'advisory'].includes(caps.safetyHooks)) errors.push(`capabilities.safetyHooks must be 'enforced' or 'advisory'`);
|
||||
}
|
||||
if (config.tier === 'instruction-only' && !config.install.instructionTier && config.name !== 'slate' && config.name !== 'gbrain') {
|
||||
errors.push('instruction-only hosts must declare install.instructionTier (what setup tells the user to copy)');
|
||||
if (config.install.registration === 'harness' && config.tier !== 'experimental') {
|
||||
errors.push('install.registration harness needs tier experimental (setup registers it through gstack-harness)');
|
||||
}
|
||||
const modelError = validateModel(config.defaultModel);
|
||||
if (modelError) {
|
||||
|
||||
Reference in new issue
Block a user