@shardworks/spider-apparatus 0.1.128 → 0.1.130
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/dist/engines/anima-session.d.ts +15 -0
- package/dist/engines/anima-session.d.ts.map +1 -0
- package/dist/engines/anima-session.js +43 -0
- package/dist/engines/anima-session.js.map +1 -0
- package/dist/engines/index.d.ts +1 -0
- package/dist/engines/index.d.ts.map +1 -1
- package/dist/engines/index.js +1 -0
- package/dist/engines/index.js.map +1 -1
- package/dist/engines/seal.d.ts +7 -2
- package/dist/engines/seal.d.ts.map +1 -1
- package/dist/engines/seal.js +16 -3
- package/dist/engines/seal.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/oculus-routes.d.ts +53 -0
- package/dist/oculus-routes.d.ts.map +1 -0
- package/dist/oculus-routes.js +133 -0
- package/dist/oculus-routes.js.map +1 -0
- package/dist/spider.d.ts +8 -0
- package/dist/spider.d.ts.map +1 -1
- package/dist/spider.js +880 -55
- package/dist/spider.js.map +1 -1
- package/dist/tools/block-types.d.ts +6 -0
- package/dist/tools/block-types.d.ts.map +1 -0
- package/dist/tools/block-types.js +18 -0
- package/dist/tools/block-types.js.map +1 -0
- package/dist/tools/engine-designs.d.ts +6 -0
- package/dist/tools/engine-designs.d.ts.map +1 -0
- package/dist/tools/engine-designs.js +18 -0
- package/dist/tools/engine-designs.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/types.d.ts +129 -10
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/static/index.html +115 -0
- package/src/static/spider.css +260 -0
- package/src/static/spider.js +827 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anima-session engine — quick (Animator-backed).
|
|
3
|
+
*
|
|
4
|
+
* A generic reusable engine that summons an anima session. Unlike the other
|
|
5
|
+
* quick engines which embed prompt logic, anima-session receives all parameters
|
|
6
|
+
* through givens: role, prompt, cwd, and optionally conversationId and writ.
|
|
7
|
+
*
|
|
8
|
+
* Returns `{ status: 'launched', sessionId }` so the Spider's collect step
|
|
9
|
+
* can poll for completion on subsequent walks. Uses the generic default
|
|
10
|
+
* collect — no custom collect method.
|
|
11
|
+
*/
|
|
12
|
+
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
13
|
+
declare const animaSessionEngine: EngineDesign;
|
|
14
|
+
export default animaSessionEngine;
|
|
15
|
+
//# sourceMappingURL=anima-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anima-session.d.ts","sourceRoot":"","sources":["../../src/engines/anima-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIrE,QAAA,MAAM,kBAAkB,EAAE,YAgCzB,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anima-session engine — quick (Animator-backed).
|
|
3
|
+
*
|
|
4
|
+
* A generic reusable engine that summons an anima session. Unlike the other
|
|
5
|
+
* quick engines which embed prompt logic, anima-session receives all parameters
|
|
6
|
+
* through givens: role, prompt, cwd, and optionally conversationId and writ.
|
|
7
|
+
*
|
|
8
|
+
* Returns `{ status: 'launched', sessionId }` so the Spider's collect step
|
|
9
|
+
* can poll for completion on subsequent walks. Uses the generic default
|
|
10
|
+
* collect — no custom collect method.
|
|
11
|
+
*/
|
|
12
|
+
import { guild } from '@shardworks/nexus-core';
|
|
13
|
+
const animaSessionEngine = {
|
|
14
|
+
id: 'anima-session',
|
|
15
|
+
async run(givens, context) {
|
|
16
|
+
// Validate required givens
|
|
17
|
+
if (typeof givens.role !== 'string' || givens.role.length === 0) {
|
|
18
|
+
throw new Error('anima-session engine requires a non-empty string "role" given.');
|
|
19
|
+
}
|
|
20
|
+
if (typeof givens.prompt !== 'string' || givens.prompt.length === 0) {
|
|
21
|
+
throw new Error('anima-session engine requires a non-empty string "prompt" given.');
|
|
22
|
+
}
|
|
23
|
+
if (typeof givens.cwd !== 'string' || givens.cwd.length === 0) {
|
|
24
|
+
throw new Error('anima-session engine requires a non-empty string "cwd" given.');
|
|
25
|
+
}
|
|
26
|
+
const animator = guild().apparatus('animator');
|
|
27
|
+
const writ = givens.writ;
|
|
28
|
+
const handle = animator.summon({
|
|
29
|
+
role: givens.role,
|
|
30
|
+
prompt: givens.prompt,
|
|
31
|
+
cwd: givens.cwd,
|
|
32
|
+
...(givens.conversationId ? { conversationId: givens.conversationId } : {}),
|
|
33
|
+
environment: writ ? { GIT_AUTHOR_EMAIL: `${writ.id}@nexus.local` } : {},
|
|
34
|
+
metadata: { engineId: context.engineId, ...(writ ? { writId: writ.id } : {}) },
|
|
35
|
+
// Enable streaming so the provider generates real-time chunks that the
|
|
36
|
+
// Animator's broadcaster captures for subscribeToSession() consumers.
|
|
37
|
+
streaming: true,
|
|
38
|
+
});
|
|
39
|
+
return { status: 'launched', sessionId: handle.sessionId };
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
export default animaSessionEngine;
|
|
43
|
+
//# sourceMappingURL=anima-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anima-session.js","sourceRoot":"","sources":["../../src/engines/anima-session.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAK/C,MAAM,kBAAkB,GAAiB;IACvC,EAAE,EAAE,eAAe;IAEnB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;QACvB,2BAA2B;QAC3B,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChE,MAAM,IAAI,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC,SAAS,CAAc,UAAU,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,IAA2B,CAAC;QAEhD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,MAAM,CAAC,cAAwB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACrF,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE;YACvE,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YAC9E,uEAAuE;YACvE,sEAAsE;YACtE,SAAS,EAAE,IAAI;SAChB,CAAC,CAAC;QAEH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;IAC7D,CAAC;CACF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
package/dist/engines/index.d.ts
CHANGED
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnE,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"}
|
package/dist/engines/index.js
CHANGED
|
@@ -1 +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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/engines/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACnE,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"}
|
package/dist/engines/seal.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Seal engine — clockwork.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Closes a draft binding via the Scriptorium. Reads the draft branch
|
|
5
5
|
* from context.upstream['draft'] (the DraftYields from the draft engine).
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* By default, seals the draft (merges inscriptions into the sealed binding)
|
|
8
|
+
* and returns SealYields with the sealed commit info. When the `abandon`
|
|
9
|
+
* given is truthy, abandons the draft instead — removing the worktree and
|
|
10
|
+
* branch without merging. This is used by rigs that need codebase access
|
|
11
|
+
* (e.g. planning rigs) but don't produce inscriptions to seal.
|
|
7
12
|
*/
|
|
8
13
|
import type { EngineDesign } from '@shardworks/fabricator-apparatus';
|
|
9
14
|
declare const sealEngine: EngineDesign;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal.d.ts","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"seal.d.ts","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAIrE,QAAA,MAAM,UAAU,EAAE,YAmCjB,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
package/dist/engines/seal.js
CHANGED
|
@@ -1,19 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Seal engine — clockwork.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Closes a draft binding via the Scriptorium. Reads the draft branch
|
|
5
5
|
* from context.upstream['draft'] (the DraftYields from the draft engine).
|
|
6
|
-
*
|
|
6
|
+
*
|
|
7
|
+
* By default, seals the draft (merges inscriptions into the sealed binding)
|
|
8
|
+
* and returns SealYields with the sealed commit info. When the `abandon`
|
|
9
|
+
* given is truthy, abandons the draft instead — removing the worktree and
|
|
10
|
+
* branch without merging. This is used by rigs that need codebase access
|
|
11
|
+
* (e.g. planning rigs) but don't produce inscriptions to seal.
|
|
7
12
|
*/
|
|
8
13
|
import { guild } from '@shardworks/nexus-core';
|
|
9
14
|
const sealEngine = {
|
|
10
15
|
id: 'seal',
|
|
11
|
-
async run(
|
|
16
|
+
async run(givens, context) {
|
|
12
17
|
const scriptorium = guild().apparatus('codexes');
|
|
13
18
|
const draftYields = context.upstream['draft'];
|
|
14
19
|
if (!draftYields) {
|
|
15
20
|
throw new Error('Seal engine requires draft yields in context.upstream but none found.');
|
|
16
21
|
}
|
|
22
|
+
if (givens.abandon) {
|
|
23
|
+
await scriptorium.abandonDraft({
|
|
24
|
+
codexName: draftYields.codexName,
|
|
25
|
+
branch: draftYields.branch,
|
|
26
|
+
force: true,
|
|
27
|
+
});
|
|
28
|
+
return { status: 'completed', yields: { abandoned: true } };
|
|
29
|
+
}
|
|
17
30
|
const result = await scriptorium.seal({
|
|
18
31
|
codexName: draftYields.codexName,
|
|
19
32
|
sourceBranch: draftYields.branch,
|
package/dist/engines/seal.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seal.js","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"seal.js","sourceRoot":"","sources":["../../src/engines/seal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AAK/C,MAAM,UAAU,GAAiB;IAC/B,EAAE,EAAE,MAAM;IAEV,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO;QACvB,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,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,MAAM,WAAW,CAAC,YAAY,CAAC;gBAC7B,SAAS,EAAE,WAAW,CAAC,SAAS;gBAChC,MAAM,EAAE,WAAW,CAAC,MAAM;gBAC1B,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC;QAC9D,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
CHANGED
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* Public types (RigDoc, EngineInstance, CrawlResult, SpiderApi, etc.) are
|
|
8
8
|
* re-exported for consumers that inspect walk results or rig state.
|
|
9
9
|
*/
|
|
10
|
-
export type { EngineStatus, EngineInstance, RigStatus, RigDoc, RigFilters, CrawlResult, SpiderApi, SpiderConfig, BlockRecord, BlockType, CheckResult, DraftYields, SealYields, RigTemplate, RigTemplateEngine, InputRequestStatus, InputRequestDoc, ChoiceQuestionSpec, BooleanQuestionSpec, TextQuestionSpec, QuestionSpec, ChoiceAnswer, AnswerValue, } from './types.ts';
|
|
10
|
+
export type { EngineStatus, EngineInstance, RigStatus, RigDoc, RigFilters, CrawlResult, SpiderApi, SpiderConfig, BlockRecord, BlockType, BlockTypeInfo, CheckResult, DraftYields, SealYields, RigTemplate, RigTemplateEngine, RigTemplateInfo, SpiderEngineRunResult, SpiderCollectResult, InputRequestStatus, InputRequestDoc, ChoiceQuestionSpec, BooleanQuestionSpec, TextQuestionSpec, QuestionSpec, ChoiceAnswer, AnswerValue, } from './types.ts';
|
|
11
|
+
export type { SpiderKit } from './spider.ts';
|
|
11
12
|
declare const _default: import("@shardworks/nexus-core").Plugin;
|
|
12
13
|
export default _default;
|
|
13
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +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,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,SAAS,EACT,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;;
|
|
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,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,SAAS,EACT,aAAa,EACb,WAAW,EACX,WAAW,EACX,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;;AAI7C,wBAA8B"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoC3C,yEAAyE;AAEzE,eAAe,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spider — custom Oculus API routes.
|
|
3
|
+
*
|
|
4
|
+
* Contributes:
|
|
5
|
+
* - GET /api/spider/config — aggregated snapshot of Spider config
|
|
6
|
+
* - GET /api/spider/session-transcript — session transcript and status
|
|
7
|
+
* - GET /api/spider/session-stream — SSE stream of real-time session chunks
|
|
8
|
+
*
|
|
9
|
+
* Does NOT import from @shardworks/oculus-apparatus to avoid a circular
|
|
10
|
+
* package dependency. The route shape is compatible with RouteContribution
|
|
11
|
+
* from the Oculus types.
|
|
12
|
+
*/
|
|
13
|
+
import type { Context } from 'hono';
|
|
14
|
+
export declare const spiderRoutes: ({
|
|
15
|
+
method: string;
|
|
16
|
+
path: string;
|
|
17
|
+
handler: (c: Context) => Response & import("hono").TypedResponse<{
|
|
18
|
+
templates: {
|
|
19
|
+
name: string;
|
|
20
|
+
source: string;
|
|
21
|
+
template: {
|
|
22
|
+
engines: {
|
|
23
|
+
id: string;
|
|
24
|
+
designId: string;
|
|
25
|
+
upstream?: string[] | undefined;
|
|
26
|
+
givens?: {
|
|
27
|
+
[x: string]: import("hono/utils/types").JSONValue;
|
|
28
|
+
} | undefined;
|
|
29
|
+
when?: string | undefined;
|
|
30
|
+
}[];
|
|
31
|
+
resolutionEngine?: string | undefined;
|
|
32
|
+
};
|
|
33
|
+
}[];
|
|
34
|
+
templateMappings: {
|
|
35
|
+
[x: string]: string;
|
|
36
|
+
};
|
|
37
|
+
engineDesigns: {
|
|
38
|
+
id: string;
|
|
39
|
+
pluginId: string;
|
|
40
|
+
hasCollect: boolean;
|
|
41
|
+
}[];
|
|
42
|
+
blockTypes: {
|
|
43
|
+
id: string;
|
|
44
|
+
pluginId: string;
|
|
45
|
+
pollIntervalMs?: number | undefined;
|
|
46
|
+
}[];
|
|
47
|
+
}, import("hono/utils/http-status").ContentfulStatusCode, "json">;
|
|
48
|
+
} | {
|
|
49
|
+
method: string;
|
|
50
|
+
path: string;
|
|
51
|
+
handler: (c: Context) => Promise<Response>;
|
|
52
|
+
})[];
|
|
53
|
+
//# sourceMappingURL=oculus-routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oculus-routes.d.ts","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAepC,eAAO,MAAM,YAAY;;;iBAIR,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiDD,OAAO;IAkF7B,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Spider — custom Oculus API routes.
|
|
3
|
+
*
|
|
4
|
+
* Contributes:
|
|
5
|
+
* - GET /api/spider/config — aggregated snapshot of Spider config
|
|
6
|
+
* - GET /api/spider/session-transcript — session transcript and status
|
|
7
|
+
* - GET /api/spider/session-stream — SSE stream of real-time session chunks
|
|
8
|
+
*
|
|
9
|
+
* Does NOT import from @shardworks/oculus-apparatus to avoid a circular
|
|
10
|
+
* package dependency. The route shape is compatible with RouteContribution
|
|
11
|
+
* from the Oculus types.
|
|
12
|
+
*/
|
|
13
|
+
import { streamSSE } from 'hono/streaming';
|
|
14
|
+
import { guild } from '@shardworks/nexus-core';
|
|
15
|
+
export const spiderRoutes = [
|
|
16
|
+
{
|
|
17
|
+
method: 'GET',
|
|
18
|
+
path: '/api/spider/config',
|
|
19
|
+
handler: (c) => {
|
|
20
|
+
const g = guild();
|
|
21
|
+
const fabricator = g.apparatus('fabricator');
|
|
22
|
+
const spider = g.apparatus('spider');
|
|
23
|
+
return c.json({
|
|
24
|
+
templates: spider.listTemplates(),
|
|
25
|
+
templateMappings: spider.listTemplateMappings(),
|
|
26
|
+
engineDesigns: fabricator.listEngineDesigns(),
|
|
27
|
+
blockTypes: spider.listBlockTypes(),
|
|
28
|
+
});
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
method: 'GET',
|
|
33
|
+
path: '/api/spider/session-transcript',
|
|
34
|
+
handler: async (c) => {
|
|
35
|
+
const sessionId = c.req.query('sessionId');
|
|
36
|
+
if (!sessionId) {
|
|
37
|
+
return c.json({ error: 'sessionId is required' }, 400);
|
|
38
|
+
}
|
|
39
|
+
const g = guild();
|
|
40
|
+
const stacks = g.apparatus('stacks');
|
|
41
|
+
const sessionsBook = stacks.readBook('animator', 'sessions');
|
|
42
|
+
const session = await sessionsBook.get(sessionId);
|
|
43
|
+
if (!session) {
|
|
44
|
+
return c.json({ error: 'Session not found' }, 404);
|
|
45
|
+
}
|
|
46
|
+
if (session.status === 'running') {
|
|
47
|
+
return c.json({ messages: [], sessionStatus: 'running' });
|
|
48
|
+
}
|
|
49
|
+
const transcriptsBook = stacks.readBook('animator', 'transcripts');
|
|
50
|
+
const transcript = await transcriptsBook.get(sessionId);
|
|
51
|
+
return c.json({
|
|
52
|
+
messages: transcript?.messages ?? [],
|
|
53
|
+
sessionStatus: session.status,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
method: 'GET',
|
|
59
|
+
path: '/api/spider/session-stream',
|
|
60
|
+
handler: async (c) => {
|
|
61
|
+
const sessionId = c.req.query('sessionId');
|
|
62
|
+
if (!sessionId) {
|
|
63
|
+
return c.json({ error: 'sessionId is required' }, 400);
|
|
64
|
+
}
|
|
65
|
+
const g = guild();
|
|
66
|
+
const stacks = g.apparatus('stacks');
|
|
67
|
+
const sessionsBook = stacks.readBook('animator', 'sessions');
|
|
68
|
+
const session = await sessionsBook.get(sessionId);
|
|
69
|
+
if (!session) {
|
|
70
|
+
return c.json({ error: 'Session not found' }, 404);
|
|
71
|
+
}
|
|
72
|
+
// For already-completed sessions, stream the full transcript and close.
|
|
73
|
+
if (session.status !== 'running') {
|
|
74
|
+
const transcriptsBook = stacks.readBook('animator', 'transcripts');
|
|
75
|
+
const transcript = await transcriptsBook.get(sessionId);
|
|
76
|
+
return streamSSE(c, async (stream) => {
|
|
77
|
+
await stream.writeSSE({
|
|
78
|
+
event: 'transcript',
|
|
79
|
+
data: JSON.stringify({ messages: transcript?.messages ?? [] }),
|
|
80
|
+
});
|
|
81
|
+
await stream.writeSSE({
|
|
82
|
+
event: 'done',
|
|
83
|
+
data: JSON.stringify({ status: session.status }),
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
// For running sessions, subscribe to the Animator's in-process broadcaster.
|
|
88
|
+
const animator = g.apparatus('animator');
|
|
89
|
+
const chunkStream = animator.subscribeToSession(sessionId);
|
|
90
|
+
if (!chunkStream) {
|
|
91
|
+
// The session is marked running in Stacks but has no in-memory broadcaster
|
|
92
|
+
// (e.g. a server restart happened). Return an empty stream so the UI can
|
|
93
|
+
// show a meaningful "no data" state and fall back gracefully.
|
|
94
|
+
return streamSSE(c, async (stream) => {
|
|
95
|
+
await stream.writeSSE({
|
|
96
|
+
event: 'done',
|
|
97
|
+
data: JSON.stringify({ status: 'running', noStream: true }),
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
return streamSSE(c, async (stream) => {
|
|
102
|
+
try {
|
|
103
|
+
for await (const chunk of chunkStream) {
|
|
104
|
+
await stream.writeSSE({
|
|
105
|
+
event: 'chunk',
|
|
106
|
+
data: JSON.stringify(chunk),
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// All chunks consumed — session has ended. Fetch and emit final transcript.
|
|
110
|
+
const transcriptsBook = stacks.readBook('animator', 'transcripts');
|
|
111
|
+
const transcript = await transcriptsBook.get(sessionId);
|
|
112
|
+
await stream.writeSSE({
|
|
113
|
+
event: 'transcript',
|
|
114
|
+
data: JSON.stringify({ messages: transcript?.messages ?? [] }),
|
|
115
|
+
});
|
|
116
|
+
const finalSession = await sessionsBook.get(sessionId);
|
|
117
|
+
await stream.writeSSE({
|
|
118
|
+
event: 'done',
|
|
119
|
+
data: JSON.stringify({ status: finalSession?.status ?? 'completed' }),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
124
|
+
await stream.writeSSE({
|
|
125
|
+
event: 'error',
|
|
126
|
+
data: JSON.stringify({ error: message }),
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
];
|
|
133
|
+
//# sourceMappingURL=oculus-routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oculus-routes.js","sourceRoot":"","sources":["../src/oculus-routes.ts"],"names":[],"mappings":"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"}
|
package/dist/spider.d.ts
CHANGED
|
@@ -18,5 +18,13 @@
|
|
|
18
18
|
* See: docs/architecture/apparatus/spider.md
|
|
19
19
|
*/
|
|
20
20
|
import type { Plugin } from '@shardworks/nexus-core';
|
|
21
|
+
import type { RigTemplate } from './types.ts';
|
|
22
|
+
/** Kit contribution interface for the Spider's rig template system. */
|
|
23
|
+
export interface SpiderKit {
|
|
24
|
+
/** Named rig templates. Keys are unqualified; registered as pluginId.key. */
|
|
25
|
+
rigTemplates?: Record<string, RigTemplate>;
|
|
26
|
+
/** Writ type → rig template name mappings. Keys are unqualified writ type names. */
|
|
27
|
+
rigTemplateMappings?: Record<string, string>;
|
|
28
|
+
}
|
|
21
29
|
export declare function createSpider(): Plugin;
|
|
22
30
|
//# sourceMappingURL=spider.d.ts.map
|
package/dist/spider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spider.d.ts","sourceRoot":"","sources":["../src/spider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"spider.d.ts","sourceRoot":"","sources":["../src/spider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAwD,MAAM,wBAAwB,CAAC;AAO3G,OAAO,KAAK,EAWV,WAAW,EAIZ,MAAM,YAAY,CAAC;AAwCpB,uEAAuE;AACvE,MAAM,WAAW,SAAS;IACxB,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC3C,oFAAoF;IACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9C;AAijCD,wBAAgB,YAAY,IAAI,MAAM,CA8xBrC"}
|