@shardworks/walker-apparatus 0.1.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/dist/engines/draft.d.ts +10 -0
- package/dist/engines/draft.d.ts.map +1 -0
- package/dist/engines/draft.js +33 -0
- package/dist/engines/draft.js.map +1 -0
- package/dist/engines/implement.d.ts +12 -0
- package/dist/engines/implement.d.ts.map +1 -0
- package/dist/engines/implement.js +29 -0
- package/dist/engines/implement.js.map +1 -0
- package/dist/engines/index.d.ts +6 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +6 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/review.d.ts +11 -0
- package/dist/engines/review.d.ts.map +1 -0
- package/dist/engines/review.js +23 -0
- package/dist/engines/review.js.map +1 -0
- package/dist/engines/revise.d.ts +11 -0
- package/dist/engines/revise.d.ts.map +1 -0
- package/dist/engines/revise.js +21 -0
- package/dist/engines/revise.js.map +1 -0
- package/dist/engines/seal.d.ts +11 -0
- package/dist/engines/seal.d.ts.map +1 -0
- package/dist/engines/seal.js +31 -0
- package/dist/engines/seal.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/index.d.ts +3 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +3 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/walk-continual.d.ts +13 -0
- package/dist/tools/walk-continual.d.ts.map +1 -0
- package/dist/tools/walk-continual.js +63 -0
- package/dist/tools/walk-continual.js.map +1 -0
- package/dist/tools/walk.d.ts +9 -0
- package/dist/tools/walk.d.ts.map +1 -0
- package/dist/tools/walk.js +22 -0
- package/dist/tools/walk.js.map +1 -0
- package/dist/types.d.ts +170 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +9 -0
- package/dist/types.js.map +1 -0
- package/dist/walker.d.ts +20 -0
- package/dist/walker.d.ts.map +1 -0
- package/dist/walker.js +345 -0
- package/dist/walker.js.map +1 -0
- package/package.json +39 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
ISC License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Sean Boots
|
|
4
|
+
|
|
5
|
+
Permission to use, copy, modify, and/or distribute this software for any
|
|
6
|
+
purpose with or without fee is hereby granted, provided that the above
|
|
7
|
+
copyright notice and this permission notice appear in all copies.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
|
10
|
+
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
|
11
|
+
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
|
12
|
+
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
|
13
|
+
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
14
|
+
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
15
|
+
PERFORMANCE OF THIS SOFTWARE.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draft engine — clockwork.
|
|
3
|
+
*
|
|
4
|
+
* Opens a draft binding via the Scriptorium. Returns DraftYields
|
|
5
|
+
* containing the worktree path and branch name for downstream engines.
|
|
6
|
+
*/
|
|
7
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
8
|
+
declare const draftEngine: EngineDesign;
|
|
9
|
+
export default draftEngine;
|
|
10
|
+
//# sourceMappingURL=draft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.d.ts","sourceRoot":"","sources":["../../src/engines/draft.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKrE,QAAA,MAAM,WAAW,EAAE,YA8BlB,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draft engine — clockwork.
|
|
3
|
+
*
|
|
4
|
+
* Opens a draft binding via the Scriptorium. Returns DraftYields
|
|
5
|
+
* containing the worktree path and branch name for downstream engines.
|
|
6
|
+
*/
|
|
7
|
+
import { execSync } from 'node:child_process';
|
|
8
|
+
import { guild } from '@shardworks/nexus-core';
|
|
9
|
+
const draftEngine = {
|
|
10
|
+
id: 'draft',
|
|
11
|
+
async run(givens, _context) {
|
|
12
|
+
const scriptorium = guild().apparatus('codexes');
|
|
13
|
+
const writ = givens.writ;
|
|
14
|
+
if (!writ.codex) {
|
|
15
|
+
throw new Error(`Writ "${writ.id}" has no codex — cannot open a draft binding.`);
|
|
16
|
+
}
|
|
17
|
+
const draft = await scriptorium.openDraft({
|
|
18
|
+
codexName: writ.codex,
|
|
19
|
+
associatedWith: writ.id,
|
|
20
|
+
});
|
|
21
|
+
const baseSha = execSync('git rev-parse HEAD', { cwd: draft.path, encoding: 'utf-8' }).trim();
|
|
22
|
+
const yields = {
|
|
23
|
+
draftId: draft.id,
|
|
24
|
+
codexName: draft.codexName,
|
|
25
|
+
branch: draft.branch,
|
|
26
|
+
path: draft.path,
|
|
27
|
+
baseSha,
|
|
28
|
+
};
|
|
29
|
+
return { status: 'completed', yields };
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export default draftEngine;
|
|
33
|
+
//# sourceMappingURL=draft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"draft.js","sourceRoot":"","sources":["../../src/engines/draft.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAM/C,MAAM,WAAW,GAAiB;IAChC,EAAE,EAAE,OAAO;IAEX,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ;QACxB,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,SAAS,CAAiB,SAAS,CAAC,CAAC;QACjE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAe,CAAC;QAEpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,SAAS,IAAI,CAAC,EAAE,+CAA+C,CAChE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,IAAI,CAAC,KAAK;YACrB,cAAc,EAAE,IAAI,CAAC,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,QAAQ,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAE9F,MAAM,MAAM,GAAgB;YAC1B,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,OAAO;SACR,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement engine — quick (Animator-backed).
|
|
3
|
+
*
|
|
4
|
+
* Summons an anima to do the commissioned work. Wraps the writ body with
|
|
5
|
+
* a commit instruction, then calls animator.summon() with the draft
|
|
6
|
+
* worktree as the working directory. Returns `{ status: 'launched', sessionId }`
|
|
7
|
+
* so the Walker's collect step can poll for completion on subsequent walks.
|
|
8
|
+
*/
|
|
9
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
10
|
+
declare const implementEngine: EngineDesign;
|
|
11
|
+
export default implementEngine;
|
|
12
|
+
//# sourceMappingURL=implement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.d.ts","sourceRoot":"","sources":["../../src/engines/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAKrE,QAAA,MAAM,eAAe,EAAE,YAqBtB,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Implement engine — quick (Animator-backed).
|
|
3
|
+
*
|
|
4
|
+
* Summons an anima to do the commissioned work. Wraps the writ body with
|
|
5
|
+
* a commit instruction, then calls animator.summon() with the draft
|
|
6
|
+
* worktree as the working directory. Returns `{ status: 'launched', sessionId }`
|
|
7
|
+
* so the Walker's collect step can poll for completion on subsequent walks.
|
|
8
|
+
*/
|
|
9
|
+
import { guild } from '@shardworks/nexus-core';
|
|
10
|
+
const implementEngine = {
|
|
11
|
+
id: 'implement',
|
|
12
|
+
async run(givens, context) {
|
|
13
|
+
const animator = guild().apparatus('animator');
|
|
14
|
+
const writ = givens.writ;
|
|
15
|
+
const draft = context.upstream['draft'];
|
|
16
|
+
const prompt = `${writ.body}\n\nCommit all changes before ending your session.`;
|
|
17
|
+
const handle = animator.summon({
|
|
18
|
+
role: givens.role,
|
|
19
|
+
prompt,
|
|
20
|
+
cwd: draft.path,
|
|
21
|
+
environment: { GIT_AUTHOR_EMAIL: `${writ.id}@nexus.local` },
|
|
22
|
+
metadata: { engineId: context.engineId, writId: writ.id },
|
|
23
|
+
});
|
|
24
|
+
const sessionResult = await handle.result;
|
|
25
|
+
return { status: 'launched', sessionId: sessionResult.id };
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export default implementEngine;
|
|
29
|
+
//# sourceMappingURL=implement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"implement.js","sourceRoot":"","sources":["../../src/engines/implement.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAM/C,MAAM,eAAe,GAAiB;IACpC,EAAE,EAAE,WAAW;IAEf,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;QACvB,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,SAAS,CAAc,UAAU,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAe,CAAC;QACpC,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB,CAAC;QAEvD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,oDAAoD,CAAC;QAEhF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAc;YAC3B,MAAM;YACN,GAAG,EAAE,KAAK,CAAC,IAAI;YACf,WAAW,EAAE,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,EAAE,cAAc,EAAE;YAC3D,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;SAC1D,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;QAC1C,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,eAAe,eAAe,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as draftEngine } from './draft.ts';
|
|
2
|
+
export { default as implementEngine } from './implement.ts';
|
|
3
|
+
export { default as reviewEngine } from './review.ts';
|
|
4
|
+
export { default as reviseEngine } from './revise.ts';
|
|
5
|
+
export { default as sealEngine } from './seal.ts';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as draftEngine } from "./draft.js";
|
|
2
|
+
export { default as implementEngine } from "./implement.js";
|
|
3
|
+
export { default as reviewEngine } from "./review.js";
|
|
4
|
+
export { default as reviseEngine } from "./revise.js";
|
|
5
|
+
export { default as sealEngine } from "./seal.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review engine — stub (Increment 1).
|
|
3
|
+
*
|
|
4
|
+
* Returns a completed result with mock yields so the full pipeline can be
|
|
5
|
+
* tested end-to-end. Increment 3 replaces this with real Animator-backed
|
|
6
|
+
* quick engine execution.
|
|
7
|
+
*/
|
|
8
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
9
|
+
declare const reviewEngine: EngineDesign;
|
|
10
|
+
export default reviewEngine;
|
|
11
|
+
//# sourceMappingURL=review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.d.ts","sourceRoot":"","sources":["../../src/engines/review.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,QAAA,MAAM,YAAY,EAAE,YAcnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Review engine — stub (Increment 1).
|
|
3
|
+
*
|
|
4
|
+
* Returns a completed result with mock yields so the full pipeline can be
|
|
5
|
+
* tested end-to-end. Increment 3 replaces this with real Animator-backed
|
|
6
|
+
* quick engine execution.
|
|
7
|
+
*/
|
|
8
|
+
const reviewEngine = {
|
|
9
|
+
id: 'review',
|
|
10
|
+
async run(_givens, _context) {
|
|
11
|
+
return {
|
|
12
|
+
status: 'completed',
|
|
13
|
+
yields: {
|
|
14
|
+
sessionId: 'stub',
|
|
15
|
+
passed: true,
|
|
16
|
+
findings: 'Stub review — no findings.',
|
|
17
|
+
mechanicalChecks: [],
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
export default reviewEngine;
|
|
23
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/engines/review.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,YAAY,GAAiB;IACjC,EAAE,EAAE,QAAQ;IAEZ,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ;QACzB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE;gBACN,SAAS,EAAE,MAAM;gBACjB,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,4BAA4B;gBACtC,gBAAgB,EAAE,EAAE;aACrB;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Revise engine — stub (Increment 1).
|
|
3
|
+
*
|
|
4
|
+
* Returns a completed result with mock yields so the full pipeline can be
|
|
5
|
+
* tested end-to-end. Increment 3 replaces this with real Animator-backed
|
|
6
|
+
* quick engine execution.
|
|
7
|
+
*/
|
|
8
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
9
|
+
declare const reviseEngine: EngineDesign;
|
|
10
|
+
export default reviseEngine;
|
|
11
|
+
//# sourceMappingURL=revise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revise.d.ts","sourceRoot":"","sources":["../../src/engines/revise.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAErE,QAAA,MAAM,YAAY,EAAE,YAYnB,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Revise engine — stub (Increment 1).
|
|
3
|
+
*
|
|
4
|
+
* Returns a completed result with mock yields so the full pipeline can be
|
|
5
|
+
* tested end-to-end. Increment 3 replaces this with real Animator-backed
|
|
6
|
+
* quick engine execution.
|
|
7
|
+
*/
|
|
8
|
+
const reviseEngine = {
|
|
9
|
+
id: 'revise',
|
|
10
|
+
async run(_givens, _context) {
|
|
11
|
+
return {
|
|
12
|
+
status: 'completed',
|
|
13
|
+
yields: {
|
|
14
|
+
sessionId: 'stub',
|
|
15
|
+
sessionStatus: 'completed',
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export default reviseEngine;
|
|
21
|
+
//# sourceMappingURL=revise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"revise.js","sourceRoot":"","sources":["../../src/engines/revise.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,MAAM,YAAY,GAAiB;IACjC,EAAE,EAAE,QAAQ;IAEZ,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ;QACzB,OAAO;YACL,MAAM,EAAE,WAAW;YACnB,MAAM,EAAE;gBACN,SAAS,EAAE,MAAM;gBACjB,aAAa,EAAE,WAAW;aAC3B;SACF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seal engine — clockwork.
|
|
3
|
+
*
|
|
4
|
+
* Seals the draft binding via the Scriptorium. Reads the draft branch
|
|
5
|
+
* from context.upstream['draft'] (the DraftYields from the draft engine).
|
|
6
|
+
* Returns SealYields with the sealed commit info.
|
|
7
|
+
*/
|
|
8
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
9
|
+
declare const sealEngine: EngineDesign;
|
|
10
|
+
export default sealEngine;
|
|
11
|
+
//# sourceMappingURL=seal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seal.d.ts","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIrE,QAAA,MAAM,UAAU,EAAE,YAyBjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Seal engine — clockwork.
|
|
3
|
+
*
|
|
4
|
+
* Seals the draft binding via the Scriptorium. Reads the draft branch
|
|
5
|
+
* from context.upstream['draft'] (the DraftYields from the draft engine).
|
|
6
|
+
* Returns SealYields with the sealed commit info.
|
|
7
|
+
*/
|
|
8
|
+
import { guild } from '@shardworks/nexus-core';
|
|
9
|
+
const sealEngine = {
|
|
10
|
+
id: 'seal',
|
|
11
|
+
async run(_givens, context) {
|
|
12
|
+
const scriptorium = guild().apparatus('codexes');
|
|
13
|
+
const draftYields = context.upstream['draft'];
|
|
14
|
+
if (!draftYields) {
|
|
15
|
+
throw new Error('Seal engine requires draft yields in context.upstream but none found.');
|
|
16
|
+
}
|
|
17
|
+
const result = await scriptorium.seal({
|
|
18
|
+
codexName: draftYields.codexName,
|
|
19
|
+
sourceBranch: draftYields.branch,
|
|
20
|
+
});
|
|
21
|
+
const yields = {
|
|
22
|
+
sealedCommit: result.sealedCommit,
|
|
23
|
+
strategy: result.strategy,
|
|
24
|
+
retries: result.retries,
|
|
25
|
+
inscriptionsSealed: result.inscriptionsSealed,
|
|
26
|
+
};
|
|
27
|
+
return { status: 'completed', yields };
|
|
28
|
+
},
|
|
29
|
+
};
|
|
30
|
+
export default sealEngine;
|
|
31
|
+
//# sourceMappingURL=seal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seal.js","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAK/C,MAAM,UAAU,GAAiB;IAC/B,EAAE,EAAE,MAAM;IAEV,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO;QACxB,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,SAAS,CAAiB,SAAS,CAAC,CAAC;QACjE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B,CAAC;QAEzE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;QAC3F,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC;YACpC,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,YAAY,EAAE,WAAW,CAAC,MAAM;SACjC,CAAC,CAAC;QAEH,MAAM,MAAM,GAAe;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;SAC9C,CAAC;QAEF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;CACF,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @shardworks/walker-apparatus — The Walker.
|
|
3
|
+
*
|
|
4
|
+
* Rig execution engine: spawns rigs for ready writs, drives engine pipelines
|
|
5
|
+
* to completion, and transitions writs via the Clerk on rig completion/failure.
|
|
6
|
+
*
|
|
7
|
+
* Public types (RigDoc, EngineInstance, WalkResult, WalkerApi, etc.) are
|
|
8
|
+
* re-exported for consumers that inspect walk results or rig state.
|
|
9
|
+
*/
|
|
10
|
+
export type { EngineStatus, EngineInstance, RigStatus, RigDoc, WalkResult, WalkerApi, WalkerConfig, DraftYields, SealYields, } from './types.ts';
|
|
11
|
+
declare const _default: import("@shardworks/nexus-core").Plugin;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,YAAY,EACV,YAAY,EACZ,cAAc,EACd,SAAS,EACT,MAAM,EACN,UAAU,EACV,SAAS,EACT,YAAY,EACZ,WAAW,EACX,UAAU,GACX,MAAM,YAAY,CAAC;;AAIpB,wBAA8B"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @shardworks/walker-apparatus — The Walker.
|
|
3
|
+
*
|
|
4
|
+
* Rig execution engine: spawns rigs for ready writs, drives engine pipelines
|
|
5
|
+
* to completion, and transitions writs via the Clerk on rig completion/failure.
|
|
6
|
+
*
|
|
7
|
+
* Public types (RigDoc, EngineInstance, WalkResult, WalkerApi, etc.) are
|
|
8
|
+
* re-exported for consumers that inspect walk results or rig state.
|
|
9
|
+
*/
|
|
10
|
+
import { createWalker } from "./walker.js";
|
|
11
|
+
// ── Default export: the apparatus plugin ──────────────────────────────
|
|
12
|
+
export default createWalker();
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3C,yEAAyE;AAEzE,eAAe,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* walkContinual tool — runs the walk loop continuously.
|
|
3
|
+
*
|
|
4
|
+
* Polls walk() on a configurable interval until stopped or no remaining
|
|
5
|
+
* work exists for the configured number of consecutive idle cycles.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
declare const _default: import("@shardworks/tools-apparatus").ToolDefinition<{
|
|
9
|
+
maxIdleCycles: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
10
|
+
pollIntervalMs: z.ZodOptional<z.ZodNumber>;
|
|
11
|
+
}>;
|
|
12
|
+
export default _default;
|
|
13
|
+
//# sourceMappingURL=walk-continual.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-continual.d.ts","sourceRoot":"","sources":["../../src/tools/walk-continual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;;;;;AAKxB,wBA0DG"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* walkContinual tool — runs the walk loop continuously.
|
|
3
|
+
*
|
|
4
|
+
* Polls walk() on a configurable interval until stopped or no remaining
|
|
5
|
+
* work exists for the configured number of consecutive idle cycles.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { guild } from '@shardworks/nexus-core';
|
|
9
|
+
import { tool } from '@shardworks/tools-apparatus';
|
|
10
|
+
export default tool({
|
|
11
|
+
name: 'walkContinual',
|
|
12
|
+
description: 'Run the Walker loop continuously until idle',
|
|
13
|
+
instructions: 'Polls walk() in a loop, sleeping between steps when idle. ' +
|
|
14
|
+
'Stops when the configured number of consecutive idle cycles is reached. ' +
|
|
15
|
+
'Returns a summary of all actions taken.',
|
|
16
|
+
params: {
|
|
17
|
+
maxIdleCycles: z
|
|
18
|
+
.number()
|
|
19
|
+
.optional()
|
|
20
|
+
.default(3)
|
|
21
|
+
.describe('Number of consecutive idle walk() calls before stopping (default: 3)'),
|
|
22
|
+
pollIntervalMs: z
|
|
23
|
+
.number()
|
|
24
|
+
.optional()
|
|
25
|
+
.describe('Override the configured poll interval in milliseconds'),
|
|
26
|
+
},
|
|
27
|
+
permission: 'walker:write',
|
|
28
|
+
handler: async (params) => {
|
|
29
|
+
const g = guild();
|
|
30
|
+
const walker = g.apparatus('walker');
|
|
31
|
+
const config = g.guildConfig().walker ?? {};
|
|
32
|
+
const intervalMs = params.pollIntervalMs ?? config.pollIntervalMs ?? 5000;
|
|
33
|
+
const maxIdle = params.maxIdleCycles;
|
|
34
|
+
const actions = [];
|
|
35
|
+
let idleCount = 0;
|
|
36
|
+
while (idleCount < maxIdle) {
|
|
37
|
+
let result;
|
|
38
|
+
try {
|
|
39
|
+
result = await walker.walk();
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
console.error('[walkContinual] walk() error:', err instanceof Error ? err.message : String(err));
|
|
43
|
+
idleCount++;
|
|
44
|
+
if (idleCount < maxIdle) {
|
|
45
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (result === null) {
|
|
50
|
+
idleCount++;
|
|
51
|
+
if (idleCount < maxIdle) {
|
|
52
|
+
await new Promise((resolve) => setTimeout(resolve, intervalMs));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
idleCount = 0;
|
|
57
|
+
actions.push(result);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return { actions, totalActions: actions.length };
|
|
61
|
+
},
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=walk-continual.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-continual.js","sourceRoot":"","sources":["../../src/tools/walk-continual.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGnD,eAAe,IAAI,CAAC;IAClB,IAAI,EAAE,eAAe;IACrB,WAAW,EAAE,6CAA6C;IAC1D,YAAY,EACV,4DAA4D;QAC5D,0EAA0E;QAC1E,yCAAyC;IAC3C,MAAM,EAAE;QACN,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CACP,sEAAsE,CACvE;QACH,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,uDAAuD,CACxD;KACJ;IACD,UAAU,EAAE,cAAc;IAC1B,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACxB,MAAM,CAAC,GAAG,KAAK,EAAE,CAAC;QAClB,MAAM,MAAM,GAAG,CAAC,CAAC,SAAS,CAAY,QAAQ,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,MAAM,IAAI,EAAkB,CAAC;QAC5D,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,IAAI,MAAM,CAAC,cAAc,IAAI,IAAI,CAAC;QAC1E,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;QAErC,MAAM,OAAO,GAAc,EAAE,CAAC;QAC9B,IAAI,SAAS,GAAG,CAAC,CAAC;QAElB,OAAO,SAAS,GAAG,OAAO,EAAE,CAAC;YAC3B,IAAI,MAA+C,CAAC;YACpD,IAAI,CAAC;gBACH,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/B,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjG,SAAS,EAAE,CAAC;gBACZ,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBACxE,CAAC;gBACD,SAAS;YACX,CAAC;YACD,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,SAAS,EAAE,CAAC;gBACZ,IAAI,SAAS,GAAG,OAAO,EAAE,CAAC;oBACxB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC;IACnD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* walk tool — executes a single step of the walk loop.
|
|
3
|
+
*
|
|
4
|
+
* Returns the WalkResult or null (idle) from one walk() call.
|
|
5
|
+
* Useful for manual step-through or testing.
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: import("@shardworks/tools-apparatus").ToolDefinition<{}>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/tools/walk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;;AAMH,wBAaG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* walk tool — executes a single step of the walk loop.
|
|
3
|
+
*
|
|
4
|
+
* Returns the WalkResult or null (idle) from one walk() call.
|
|
5
|
+
* Useful for manual step-through or testing.
|
|
6
|
+
*/
|
|
7
|
+
import { guild } from '@shardworks/nexus-core';
|
|
8
|
+
import { tool } from '@shardworks/tools-apparatus';
|
|
9
|
+
export default tool({
|
|
10
|
+
name: 'walk',
|
|
11
|
+
description: 'Execute one step of the Walker loop',
|
|
12
|
+
instructions: 'Runs a single walk() step: collect a pending session result, run the next ' +
|
|
13
|
+
'ready engine, or spawn a rig for a ready writ — in that priority order. ' +
|
|
14
|
+
'Returns the action taken, or null if there is nothing to do.',
|
|
15
|
+
params: {},
|
|
16
|
+
permission: 'walker:write',
|
|
17
|
+
handler: async () => {
|
|
18
|
+
const walker = guild().apparatus('walker');
|
|
19
|
+
return walker.walk();
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.js","sourceRoot":"","sources":["../../src/tools/walk.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AAGnD,eAAe,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,qCAAqC;IAClD,YAAY,EACV,4EAA4E;QAC5E,0EAA0E;QAC1E,8DAA8D;IAChE,MAAM,EAAE,EAAE;IACV,UAAU,EAAE,cAAc;IAC1B,OAAO,EAAE,KAAK,IAAI,EAAE;QAClB,MAAM,MAAM,GAAG,KAAK,EAAE,CAAC,SAAS,CAAY,QAAQ,CAAC,CAAC;QACtD,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;IACvB,CAAC;CACF,CAAC,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Walker — public types.
|
|
3
|
+
*
|
|
4
|
+
* Rig and engine data model, WalkResult, WalkerApi, and configuration.
|
|
5
|
+
* Engine yield shapes (DraftYields, SealYields) live here too so downstream
|
|
6
|
+
* packages can import them without depending on the engine implementation files.
|
|
7
|
+
*/
|
|
8
|
+
export type EngineStatus = 'pending' | 'running' | 'completed' | 'failed';
|
|
9
|
+
/**
|
|
10
|
+
* A single engine slot within a rig.
|
|
11
|
+
*
|
|
12
|
+
* `id` is the engine's position identifier (e.g. 'draft', 'implement').
|
|
13
|
+
* For the static pipeline it matches `designId`.
|
|
14
|
+
*
|
|
15
|
+
* `givensSpec` holds literal values set at spawn time (writ, role, commands).
|
|
16
|
+
* The Walker assembles `givens` from this directly; upstream yields arrive
|
|
17
|
+
* via `context.upstream` as the escape hatch.
|
|
18
|
+
*/
|
|
19
|
+
export interface EngineInstance {
|
|
20
|
+
/** Unique identifier within the rig (e.g. 'draft', 'implement'). */
|
|
21
|
+
id: string;
|
|
22
|
+
/** The engine design to look up in the Fabricator. */
|
|
23
|
+
designId: string;
|
|
24
|
+
/** Current execution status. */
|
|
25
|
+
status: EngineStatus;
|
|
26
|
+
/** Engine IDs that must be completed before this engine can run. */
|
|
27
|
+
upstream: string[];
|
|
28
|
+
/** Literal givens values set at rig spawn time. */
|
|
29
|
+
givensSpec: Record<string, unknown>;
|
|
30
|
+
/** Yields from a completed engine run (JSON-serializable). */
|
|
31
|
+
yields?: unknown;
|
|
32
|
+
/** Error message if this engine failed. */
|
|
33
|
+
error?: string;
|
|
34
|
+
/** Session ID from a launched quick engine, used by the collect step. */
|
|
35
|
+
sessionId?: string;
|
|
36
|
+
/** ISO timestamp when execution started. */
|
|
37
|
+
startedAt?: string;
|
|
38
|
+
/** ISO timestamp when execution completed (or failed). */
|
|
39
|
+
completedAt?: string;
|
|
40
|
+
}
|
|
41
|
+
export type RigStatus = 'running' | 'completed' | 'failed';
|
|
42
|
+
/**
|
|
43
|
+
* A rig — the execution context for a single writ.
|
|
44
|
+
*
|
|
45
|
+
* Stored in The Stacks (`walker/rigs` book). The `engines` array is the
|
|
46
|
+
* ordered pipeline of engine instances. The Walker updates this document
|
|
47
|
+
* in-place as engines run and complete.
|
|
48
|
+
*/
|
|
49
|
+
export interface RigDoc {
|
|
50
|
+
/** Index signature required to satisfy BookEntry constraint. */
|
|
51
|
+
[key: string]: unknown;
|
|
52
|
+
/** Unique rig id. */
|
|
53
|
+
id: string;
|
|
54
|
+
/** The writ this rig is executing. */
|
|
55
|
+
writId: string;
|
|
56
|
+
/** Current rig status. */
|
|
57
|
+
status: RigStatus;
|
|
58
|
+
/** Ordered engine pipeline. */
|
|
59
|
+
engines: EngineInstance[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* The result of a single walk() call.
|
|
63
|
+
*
|
|
64
|
+
* Four variants, ordered by priority:
|
|
65
|
+
* - 'engine-completed' — an engine finished (collected or ran inline); rig still running
|
|
66
|
+
* - 'engine-started' — launched a quick engine's session
|
|
67
|
+
* - 'rig-spawned' — created a new rig for a ready writ
|
|
68
|
+
* - 'rig-completed' — the walk step caused a rig to reach a terminal state
|
|
69
|
+
*
|
|
70
|
+
* null means no work was available.
|
|
71
|
+
*/
|
|
72
|
+
export type WalkResult = {
|
|
73
|
+
action: 'engine-completed';
|
|
74
|
+
rigId: string;
|
|
75
|
+
engineId: string;
|
|
76
|
+
} | {
|
|
77
|
+
action: 'engine-started';
|
|
78
|
+
rigId: string;
|
|
79
|
+
engineId: string;
|
|
80
|
+
} | {
|
|
81
|
+
action: 'rig-spawned';
|
|
82
|
+
rigId: string;
|
|
83
|
+
writId: string;
|
|
84
|
+
} | {
|
|
85
|
+
action: 'rig-completed';
|
|
86
|
+
rigId: string;
|
|
87
|
+
writId: string;
|
|
88
|
+
outcome: 'completed' | 'failed';
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* The Walker's public API — retrieved via guild().apparatus<WalkerApi>('walker').
|
|
92
|
+
*/
|
|
93
|
+
export interface WalkerApi {
|
|
94
|
+
/**
|
|
95
|
+
* Execute one step of the walk loop.
|
|
96
|
+
*
|
|
97
|
+
* Priority ordering: collect > run > spawn.
|
|
98
|
+
* Returns null when no work is available.
|
|
99
|
+
*/
|
|
100
|
+
walk(): Promise<WalkResult | null>;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Walker apparatus configuration — lives under the `walker` key in guild.json.
|
|
104
|
+
*/
|
|
105
|
+
export interface WalkerConfig {
|
|
106
|
+
/**
|
|
107
|
+
* Role to summon for quick engine sessions.
|
|
108
|
+
* Default: 'artificer'.
|
|
109
|
+
*/
|
|
110
|
+
role?: string;
|
|
111
|
+
/**
|
|
112
|
+
* Polling interval for walkContinual tool (milliseconds).
|
|
113
|
+
* Default: 5000.
|
|
114
|
+
*/
|
|
115
|
+
pollIntervalMs?: number;
|
|
116
|
+
/**
|
|
117
|
+
* Build command to pass to quick engines.
|
|
118
|
+
*/
|
|
119
|
+
buildCommand?: string;
|
|
120
|
+
/**
|
|
121
|
+
* Test command to pass to quick engines.
|
|
122
|
+
*/
|
|
123
|
+
testCommand?: string;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Yields from the `draft` clockwork engine.
|
|
127
|
+
* The Walker stores these in the engine instance and passes them
|
|
128
|
+
* to downstream engines via context.upstream['draft'].
|
|
129
|
+
*/
|
|
130
|
+
export interface DraftYields {
|
|
131
|
+
/** The draft's unique id. */
|
|
132
|
+
draftId: string;
|
|
133
|
+
/** Codex this draft belongs to. */
|
|
134
|
+
codexName: string;
|
|
135
|
+
/** Git branch name for the draft. */
|
|
136
|
+
branch: string;
|
|
137
|
+
/** Absolute filesystem path to the draft's worktree. */
|
|
138
|
+
path: string;
|
|
139
|
+
/** HEAD commit SHA at the time the draft was opened. Used by review engine to compute diffs. */
|
|
140
|
+
baseSha: string;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Yields from the `seal` clockwork engine.
|
|
144
|
+
*/
|
|
145
|
+
export interface SealYields {
|
|
146
|
+
/** The commit SHA at head of the target branch after sealing. */
|
|
147
|
+
sealedCommit: string;
|
|
148
|
+
/** Git strategy used. */
|
|
149
|
+
strategy: 'fast-forward' | 'rebase';
|
|
150
|
+
/** Number of retry attempts. */
|
|
151
|
+
retries: number;
|
|
152
|
+
/** Number of inscriptions (commits) sealed. */
|
|
153
|
+
inscriptionsSealed: number;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Yields from the `implement` quick engine.
|
|
157
|
+
* Set by the Walker's collect step when the Animator session completes.
|
|
158
|
+
*/
|
|
159
|
+
export interface ImplementYields {
|
|
160
|
+
/** The Animator session id. */
|
|
161
|
+
sessionId: string;
|
|
162
|
+
/** Terminal status of the session. */
|
|
163
|
+
sessionStatus: 'completed' | 'failed';
|
|
164
|
+
}
|
|
165
|
+
declare module '@shardworks/nexus-core' {
|
|
166
|
+
interface GuildConfig {
|
|
167
|
+
walker?: WalkerConfig;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Walker — public types.
|
|
3
|
+
*
|
|
4
|
+
* Rig and engine data model, WalkResult, WalkerApi, and configuration.
|
|
5
|
+
* Engine yield shapes (DraftYields, SealYields) live here too so downstream
|
|
6
|
+
* packages can import them without depending on the engine implementation files.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
package/dist/walker.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Walker — rig execution engine apparatus.
|
|
3
|
+
*
|
|
4
|
+
* The Walker drives writ-to-completion by managing rigs: ordered pipelines
|
|
5
|
+
* of engine instances. Each walk() call performs one unit of work:
|
|
6
|
+
*
|
|
7
|
+
* collect > run > spawn (priority order)
|
|
8
|
+
*
|
|
9
|
+
* collect — check running engines for terminal session results
|
|
10
|
+
* run — execute the next pending engine (clockwork inline, quick → launch)
|
|
11
|
+
* spawn — create a new rig for a ready writ with no existing rig
|
|
12
|
+
*
|
|
13
|
+
* CDC on the rigs book (Phase 1 cascade) transitions the associated writ
|
|
14
|
+
* when a rig reaches a terminal state (completed or failed).
|
|
15
|
+
*
|
|
16
|
+
* See: docs/architecture/apparatus/walker.md
|
|
17
|
+
*/
|
|
18
|
+
import type { Plugin } from '@shardworks/nexus-core';
|
|
19
|
+
export declare function createWalker(): Plugin;
|
|
20
|
+
//# sourceMappingURL=walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.d.ts","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAC;AA+FrE,wBAAgB,YAAY,IAAI,MAAM,CAoTrC"}
|
package/dist/walker.js
ADDED
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The Walker — rig execution engine apparatus.
|
|
3
|
+
*
|
|
4
|
+
* The Walker drives writ-to-completion by managing rigs: ordered pipelines
|
|
5
|
+
* of engine instances. Each walk() call performs one unit of work:
|
|
6
|
+
*
|
|
7
|
+
* collect > run > spawn (priority order)
|
|
8
|
+
*
|
|
9
|
+
* collect — check running engines for terminal session results
|
|
10
|
+
* run — execute the next pending engine (clockwork inline, quick → launch)
|
|
11
|
+
* spawn — create a new rig for a ready writ with no existing rig
|
|
12
|
+
*
|
|
13
|
+
* CDC on the rigs book (Phase 1 cascade) transitions the associated writ
|
|
14
|
+
* when a rig reaches a terminal state (completed or failed).
|
|
15
|
+
*
|
|
16
|
+
* See: docs/architecture/apparatus/walker.md
|
|
17
|
+
*/
|
|
18
|
+
import { guild, generateId } from '@shardworks/nexus-core';
|
|
19
|
+
import { draftEngine, implementEngine, reviewEngine, reviseEngine, sealEngine, } from "./engines/index.js";
|
|
20
|
+
import { walkTool, walkContinualTool } from "./tools/index.js";
|
|
21
|
+
// ── Helpers ────────────────────────────────────────────────────────────
|
|
22
|
+
/**
|
|
23
|
+
* Check whether a value is JSON-serializable.
|
|
24
|
+
* Non-serializable yields cause engine failure — the Stacks cannot store them.
|
|
25
|
+
*/
|
|
26
|
+
function isJsonSerializable(value) {
|
|
27
|
+
try {
|
|
28
|
+
JSON.stringify(value);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Build the upstream yields map for a rig: all completed engine yields
|
|
37
|
+
* keyed by engine id. Passed as context.upstream to the engine's run().
|
|
38
|
+
*/
|
|
39
|
+
function buildUpstreamMap(rig) {
|
|
40
|
+
const upstream = {};
|
|
41
|
+
for (const engine of rig.engines) {
|
|
42
|
+
if (engine.status === 'completed' && engine.yields !== undefined) {
|
|
43
|
+
upstream[engine.id] = engine.yields;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return upstream;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Find the first pending engine whose entire upstream is completed.
|
|
50
|
+
* Returns null if no runnable engine exists.
|
|
51
|
+
*/
|
|
52
|
+
function findRunnableEngine(rig) {
|
|
53
|
+
for (const engine of rig.engines) {
|
|
54
|
+
if (engine.status !== 'pending')
|
|
55
|
+
continue;
|
|
56
|
+
const allUpstreamDone = engine.upstream.every((upstreamId) => {
|
|
57
|
+
const dep = rig.engines.find((e) => e.id === upstreamId);
|
|
58
|
+
return dep?.status === 'completed';
|
|
59
|
+
});
|
|
60
|
+
if (allUpstreamDone)
|
|
61
|
+
return engine;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Produce the five-engine static pipeline for a writ.
|
|
67
|
+
* Each engine receives only the givens it needs.
|
|
68
|
+
* Upstream yields arrive via context.upstream at run time.
|
|
69
|
+
*/
|
|
70
|
+
function buildStaticEngines(writ, config) {
|
|
71
|
+
const role = config.role ?? 'artificer';
|
|
72
|
+
const reviewGivens = {
|
|
73
|
+
writ,
|
|
74
|
+
role: 'reviewer',
|
|
75
|
+
...(config.buildCommand !== undefined ? { buildCommand: config.buildCommand } : {}),
|
|
76
|
+
...(config.testCommand !== undefined ? { testCommand: config.testCommand } : {}),
|
|
77
|
+
};
|
|
78
|
+
return [
|
|
79
|
+
{ id: 'draft', designId: 'draft', status: 'pending', upstream: [], givensSpec: { writ } },
|
|
80
|
+
{ id: 'implement', designId: 'implement', status: 'pending', upstream: ['draft'], givensSpec: { writ, role } },
|
|
81
|
+
{ id: 'review', designId: 'review', status: 'pending', upstream: ['implement'], givensSpec: reviewGivens },
|
|
82
|
+
{ id: 'revise', designId: 'revise', status: 'pending', upstream: ['review'], givensSpec: { writ, role } },
|
|
83
|
+
{ id: 'seal', designId: 'seal', status: 'pending', upstream: ['revise'], givensSpec: {} },
|
|
84
|
+
];
|
|
85
|
+
}
|
|
86
|
+
// ── Apparatus factory ──────────────────────────────────────────────────
|
|
87
|
+
export function createWalker() {
|
|
88
|
+
let rigsBook;
|
|
89
|
+
let sessionsBook;
|
|
90
|
+
let writsBook;
|
|
91
|
+
let clerk;
|
|
92
|
+
let fabricator;
|
|
93
|
+
let walkerConfig = {};
|
|
94
|
+
// ── Internal walk operations ─────────────────────────────────────
|
|
95
|
+
/**
|
|
96
|
+
* Mark an engine failed and propagate failure to the rig (same update).
|
|
97
|
+
*/
|
|
98
|
+
async function failEngine(rig, engineId, errorMessage) {
|
|
99
|
+
const now = new Date().toISOString();
|
|
100
|
+
const updatedEngines = rig.engines.map((e) => e.id === engineId
|
|
101
|
+
? { ...e, status: 'failed', error: errorMessage, completedAt: now }
|
|
102
|
+
: e);
|
|
103
|
+
await rigsBook.patch(rig.id, {
|
|
104
|
+
engines: updatedEngines,
|
|
105
|
+
status: 'failed',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Phase 1 — collect.
|
|
110
|
+
*
|
|
111
|
+
* Find the first running engine with a sessionId whose session has
|
|
112
|
+
* reached a terminal state. Populate yields and advance the engine
|
|
113
|
+
* (and possibly the rig) to completed or failed.
|
|
114
|
+
*/
|
|
115
|
+
async function tryCollect() {
|
|
116
|
+
const runningRigs = await rigsBook.find({ where: [['status', '=', 'running']] });
|
|
117
|
+
for (const rig of runningRigs) {
|
|
118
|
+
for (const engine of rig.engines) {
|
|
119
|
+
if (engine.status !== 'running' || !engine.sessionId)
|
|
120
|
+
continue;
|
|
121
|
+
const session = await sessionsBook.get(engine.sessionId);
|
|
122
|
+
if (!session || session.status === 'running')
|
|
123
|
+
continue;
|
|
124
|
+
// Terminal session found — collect.
|
|
125
|
+
const now = new Date().toISOString();
|
|
126
|
+
if (session.status === 'failed' || session.status === 'timeout') {
|
|
127
|
+
await failEngine(rig, engine.id, session.error ?? `Session ${session.status}`);
|
|
128
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'failed' };
|
|
129
|
+
}
|
|
130
|
+
// Completed session — assemble yields from session record.
|
|
131
|
+
const yields = {
|
|
132
|
+
sessionId: session.id,
|
|
133
|
+
sessionStatus: session.status,
|
|
134
|
+
...(session.output !== undefined ? { output: session.output } : {}),
|
|
135
|
+
};
|
|
136
|
+
if (!isJsonSerializable(yields)) {
|
|
137
|
+
await failEngine(rig, engine.id, 'Session yields are not JSON-serializable');
|
|
138
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'failed' };
|
|
139
|
+
}
|
|
140
|
+
const updatedEngines = rig.engines.map((e) => e.id === engine.id
|
|
141
|
+
? { ...e, status: 'completed', yields, completedAt: now }
|
|
142
|
+
: e);
|
|
143
|
+
const allCompleted = updatedEngines.every((e) => e.status === 'completed');
|
|
144
|
+
await rigsBook.patch(rig.id, {
|
|
145
|
+
engines: updatedEngines,
|
|
146
|
+
status: allCompleted ? 'completed' : 'running',
|
|
147
|
+
});
|
|
148
|
+
if (allCompleted) {
|
|
149
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'completed' };
|
|
150
|
+
}
|
|
151
|
+
return { action: 'engine-completed', rigId: rig.id, engineId: engine.id };
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return null;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Phase 2 — run.
|
|
158
|
+
*
|
|
159
|
+
* Find the first pending engine in any running rig whose upstream is
|
|
160
|
+
* all completed. Execute it:
|
|
161
|
+
* - Clockwork ('completed') → store yields, mark engine completed,
|
|
162
|
+
* check for rig completion.
|
|
163
|
+
* - Quick ('launched') → store sessionId, mark engine running.
|
|
164
|
+
*/
|
|
165
|
+
async function tryRun() {
|
|
166
|
+
const runningRigs = await rigsBook.find({ where: [['status', '=', 'running']] });
|
|
167
|
+
for (const rig of runningRigs) {
|
|
168
|
+
const pending = findRunnableEngine(rig);
|
|
169
|
+
if (!pending)
|
|
170
|
+
continue;
|
|
171
|
+
const design = fabricator.getEngineDesign(pending.designId);
|
|
172
|
+
if (!design) {
|
|
173
|
+
await failEngine(rig, pending.id, `No engine design found for "${pending.designId}"`);
|
|
174
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'failed' };
|
|
175
|
+
}
|
|
176
|
+
const now = new Date().toISOString();
|
|
177
|
+
const upstream = buildUpstreamMap(rig);
|
|
178
|
+
const givens = { ...pending.givensSpec };
|
|
179
|
+
const context = { engineId: pending.id, upstream };
|
|
180
|
+
let engineResult;
|
|
181
|
+
try {
|
|
182
|
+
// Mark engine as running before executing
|
|
183
|
+
const startedEngines = rig.engines.map((e) => e.id === pending.id ? { ...e, status: 'running', startedAt: now } : e);
|
|
184
|
+
await rigsBook.patch(rig.id, { engines: startedEngines });
|
|
185
|
+
// Re-fetch to get the up-to-date engines list (with startedAt set)
|
|
186
|
+
const updatedRig = { ...rig, engines: startedEngines };
|
|
187
|
+
engineResult = await design.run(givens, context);
|
|
188
|
+
if (engineResult.status === 'launched') {
|
|
189
|
+
// Quick engine — store sessionId, leave engine in 'running'
|
|
190
|
+
const { sessionId } = engineResult;
|
|
191
|
+
const launchedEngines = updatedRig.engines.map((e) => e.id === pending.id
|
|
192
|
+
? { ...e, status: 'running', sessionId }
|
|
193
|
+
: e);
|
|
194
|
+
await rigsBook.patch(rig.id, { engines: launchedEngines });
|
|
195
|
+
return { action: 'engine-started', rigId: rig.id, engineId: pending.id };
|
|
196
|
+
}
|
|
197
|
+
// Clockwork engine — validate and store yields
|
|
198
|
+
const { yields } = engineResult;
|
|
199
|
+
if (!isJsonSerializable(yields)) {
|
|
200
|
+
await failEngine(updatedRig, pending.id, 'Engine yields are not JSON-serializable');
|
|
201
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'failed' };
|
|
202
|
+
}
|
|
203
|
+
const completedAt = new Date().toISOString();
|
|
204
|
+
const completedEngines = updatedRig.engines.map((e) => e.id === pending.id
|
|
205
|
+
? { ...e, status: 'completed', yields, completedAt }
|
|
206
|
+
: e);
|
|
207
|
+
const allCompleted = completedEngines.every((e) => e.status === 'completed');
|
|
208
|
+
await rigsBook.patch(rig.id, {
|
|
209
|
+
engines: completedEngines,
|
|
210
|
+
status: allCompleted ? 'completed' : 'running',
|
|
211
|
+
});
|
|
212
|
+
if (allCompleted) {
|
|
213
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'completed' };
|
|
214
|
+
}
|
|
215
|
+
return { action: 'engine-completed', rigId: rig.id, engineId: pending.id };
|
|
216
|
+
}
|
|
217
|
+
catch (err) {
|
|
218
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
219
|
+
await failEngine(rig, pending.id, errorMessage);
|
|
220
|
+
return { action: 'rig-completed', rigId: rig.id, writId: rig.writId, outcome: 'failed' };
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Phase 3 — spawn.
|
|
227
|
+
*
|
|
228
|
+
* Find the oldest ready writ with no existing rig. Create a rig and
|
|
229
|
+
* transition the writ to active so the Clerk tracks it as in-progress.
|
|
230
|
+
*/
|
|
231
|
+
async function trySpawn() {
|
|
232
|
+
// Find ready writs ordered by creation time (oldest first)
|
|
233
|
+
const readyWrits = await writsBook.find({
|
|
234
|
+
where: [['status', '=', 'ready']],
|
|
235
|
+
orderBy: ['createdAt', 'asc'],
|
|
236
|
+
limit: 10,
|
|
237
|
+
});
|
|
238
|
+
for (const writ of readyWrits) {
|
|
239
|
+
// Check for existing rig
|
|
240
|
+
const existing = await rigsBook.find({
|
|
241
|
+
where: [['writId', '=', writ.id]],
|
|
242
|
+
limit: 1,
|
|
243
|
+
});
|
|
244
|
+
if (existing.length > 0)
|
|
245
|
+
continue;
|
|
246
|
+
const rigId = generateId('rig', 4);
|
|
247
|
+
const engines = buildStaticEngines(writ, walkerConfig);
|
|
248
|
+
const rig = {
|
|
249
|
+
id: rigId,
|
|
250
|
+
writId: writ.id,
|
|
251
|
+
status: 'running',
|
|
252
|
+
engines,
|
|
253
|
+
};
|
|
254
|
+
await rigsBook.put(rig);
|
|
255
|
+
// Transition writ to active so Clerk tracks it
|
|
256
|
+
try {
|
|
257
|
+
await clerk.transition(writ.id, 'active');
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
// Only swallow state-transition conflicts (writ already moved past 'ready')
|
|
261
|
+
if (err instanceof Error && err.message.includes('transition')) {
|
|
262
|
+
// Race condition — another walker got here first. The rig is already created,
|
|
263
|
+
// so we continue. The writ is already active or beyond.
|
|
264
|
+
}
|
|
265
|
+
else {
|
|
266
|
+
throw err;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
return { action: 'rig-spawned', rigId, writId: writ.id };
|
|
270
|
+
}
|
|
271
|
+
return null;
|
|
272
|
+
}
|
|
273
|
+
// ── WalkerApi ─────────────────────────────────────────────────────
|
|
274
|
+
const api = {
|
|
275
|
+
async walk() {
|
|
276
|
+
const collected = await tryCollect();
|
|
277
|
+
if (collected)
|
|
278
|
+
return collected;
|
|
279
|
+
const ran = await tryRun();
|
|
280
|
+
if (ran)
|
|
281
|
+
return ran;
|
|
282
|
+
const spawned = await trySpawn();
|
|
283
|
+
if (spawned)
|
|
284
|
+
return spawned;
|
|
285
|
+
return null;
|
|
286
|
+
},
|
|
287
|
+
};
|
|
288
|
+
// ── Apparatus ─────────────────────────────────────────────────────
|
|
289
|
+
return {
|
|
290
|
+
apparatus: {
|
|
291
|
+
requires: ['stacks', 'clerk', 'fabricator'],
|
|
292
|
+
supportKit: {
|
|
293
|
+
books: {
|
|
294
|
+
rigs: {
|
|
295
|
+
indexes: ['status', 'writId', ['status', 'writId']],
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
engines: {
|
|
299
|
+
draft: draftEngine,
|
|
300
|
+
implement: implementEngine,
|
|
301
|
+
review: reviewEngine,
|
|
302
|
+
revise: reviseEngine,
|
|
303
|
+
seal: sealEngine,
|
|
304
|
+
},
|
|
305
|
+
tools: [walkTool, walkContinualTool],
|
|
306
|
+
},
|
|
307
|
+
provides: api,
|
|
308
|
+
start(_ctx) {
|
|
309
|
+
const g = guild();
|
|
310
|
+
walkerConfig = g.guildConfig().walker ?? {};
|
|
311
|
+
const stacks = g.apparatus('stacks');
|
|
312
|
+
clerk = g.apparatus('clerk');
|
|
313
|
+
fabricator = g.apparatus('fabricator');
|
|
314
|
+
rigsBook = stacks.book('walker', 'rigs');
|
|
315
|
+
sessionsBook = stacks.readBook('animator', 'sessions');
|
|
316
|
+
writsBook = stacks.readBook('clerk', 'writs');
|
|
317
|
+
// CDC — Phase 1 cascade on rigs book.
|
|
318
|
+
// When a rig reaches a terminal state, transition the associated writ.
|
|
319
|
+
stacks.watch('walker', 'rigs', async (event) => {
|
|
320
|
+
if (event.type !== 'update')
|
|
321
|
+
return;
|
|
322
|
+
const rig = event.entry;
|
|
323
|
+
const prev = event.prev;
|
|
324
|
+
// Only act when status changes to a terminal state
|
|
325
|
+
if (rig.status === prev.status)
|
|
326
|
+
return;
|
|
327
|
+
if (rig.status === 'completed') {
|
|
328
|
+
// Use seal yields as the resolution summary
|
|
329
|
+
const sealEngine = rig.engines.find((e) => e.id === 'seal');
|
|
330
|
+
const resolution = sealEngine?.yields
|
|
331
|
+
? JSON.stringify(sealEngine.yields)
|
|
332
|
+
: 'Rig completed';
|
|
333
|
+
await clerk.transition(rig.writId, 'completed', { resolution });
|
|
334
|
+
}
|
|
335
|
+
else if (rig.status === 'failed') {
|
|
336
|
+
const failedEngine = rig.engines.find((e) => e.status === 'failed');
|
|
337
|
+
const resolution = failedEngine?.error ?? 'Engine failure';
|
|
338
|
+
await clerk.transition(rig.writId, 'failed', { resolution });
|
|
339
|
+
}
|
|
340
|
+
}, { failOnError: true });
|
|
341
|
+
},
|
|
342
|
+
},
|
|
343
|
+
};
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walker.js","sourceRoot":"","sources":["../src/walker.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shardworks/walker-apparatus",
|
|
3
|
+
"version": "0.1.113",
|
|
4
|
+
"license": "ISC",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/shardworks/nexus",
|
|
8
|
+
"directory": "packages/plugins/walker"
|
|
9
|
+
},
|
|
10
|
+
"description": "The Walker — rig execution engine apparatus",
|
|
11
|
+
"type": "module",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"zod": "4.3.6",
|
|
20
|
+
"@shardworks/fabricator-apparatus": "0.1.113",
|
|
21
|
+
"@shardworks/stacks-apparatus": "0.1.113",
|
|
22
|
+
"@shardworks/clerk-apparatus": "0.1.113",
|
|
23
|
+
"@shardworks/nexus-core": "0.1.113",
|
|
24
|
+
"@shardworks/tools-apparatus": "0.1.113",
|
|
25
|
+
"@shardworks/animator-apparatus": "0.1.113",
|
|
26
|
+
"@shardworks/codexes-apparatus": "0.1.113"
|
|
27
|
+
},
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@types/node": "25.5.0"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist"
|
|
33
|
+
],
|
|
34
|
+
"scripts": {
|
|
35
|
+
"build": "tsc",
|
|
36
|
+
"test": "node --disable-warning=ExperimentalWarning --experimental-transform-types --test 'src/**/*.test.ts'",
|
|
37
|
+
"typecheck": "tsc --noEmit"
|
|
38
|
+
}
|
|
39
|
+
}
|