@telora/daemon 0.16.33 → 0.16.44
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/build-info.json +2 -2
- package/dist/assembly-resolvers.d.ts +13 -65
- package/dist/assembly-resolvers.d.ts.map +1 -1
- package/dist/assembly-resolvers.js +15 -1915
- package/dist/assembly-resolvers.js.map +1 -1
- package/dist/audit-phase.d.ts +2 -2
- package/dist/audit-phase.d.ts.map +1 -1
- package/dist/audit-phase.js +1 -1
- package/dist/audit-phase.js.map +1 -1
- package/dist/{completion-handler.d.ts → completion/agent-completion.d.ts} +3 -3
- package/dist/completion/agent-completion.d.ts.map +1 -0
- package/dist/{completion-handler.js → completion/agent-completion.js} +7 -7
- package/dist/completion/agent-completion.js.map +1 -0
- package/dist/{completion-detector.d.ts → completion/detector.d.ts} +1 -1
- package/dist/completion/detector.d.ts.map +1 -0
- package/dist/{completion-detector.js → completion/detector.js} +1 -1
- package/dist/completion/detector.js.map +1 -0
- package/dist/{focus-completion-event.d.ts → completion/event.d.ts} +21 -3
- package/dist/completion/event.d.ts.map +1 -0
- package/dist/{focus-completion-event.js → completion/event.js} +55 -9
- package/dist/completion/event.js.map +1 -0
- package/dist/completion/index.d.ts +24 -0
- package/dist/completion/index.d.ts.map +1 -0
- package/dist/completion/index.js +25 -0
- package/dist/completion/index.js.map +1 -0
- package/dist/{focus-completion.d.ts → completion/team-completion.d.ts} +11 -11
- package/dist/completion/team-completion.d.ts.map +1 -0
- package/dist/{focus-completion.js → completion/team-completion.js} +37 -26
- package/dist/completion/team-completion.js.map +1 -0
- package/dist/{focus-team-lifecycle.d.ts → completion/team-lifecycle.d.ts} +2 -2
- package/dist/completion/team-lifecycle.d.ts.map +1 -0
- package/dist/{focus-team-lifecycle.js → completion/team-lifecycle.js} +12 -12
- package/dist/completion/team-lifecycle.js.map +1 -0
- package/dist/directive/directive-queue.d.ts +117 -0
- package/dist/directive/directive-queue.d.ts.map +1 -0
- package/dist/directive/directive-queue.js +114 -0
- package/dist/directive/directive-queue.js.map +1 -0
- package/dist/directive/stage-tracker.d.ts +23 -0
- package/dist/directive/stage-tracker.d.ts.map +1 -0
- package/dist/directive/stage-tracker.js +27 -0
- package/dist/directive/stage-tracker.js.map +1 -0
- package/dist/directive-executor.d.ts +3 -72
- package/dist/directive-executor.d.ts.map +1 -1
- package/dist/directive-executor.js +31 -83
- package/dist/directive-executor.js.map +1 -1
- package/dist/focus-engine.d.ts.map +1 -1
- package/dist/focus-engine.js +1 -2
- package/dist/focus-engine.js.map +1 -1
- package/dist/focus-executor.d.ts +4 -4
- package/dist/focus-executor.d.ts.map +1 -1
- package/dist/focus-executor.js +6 -5
- package/dist/focus-executor.js.map +1 -1
- package/dist/focus-merge.js +1 -1
- package/dist/focus-merge.js.map +1 -1
- package/dist/focus-prompt-builder.d.ts.map +1 -1
- package/dist/focus-prompt-builder.js +5 -39
- package/dist/focus-prompt-builder.js.map +1 -1
- package/dist/listener.js +1 -1
- package/dist/listener.js.map +1 -1
- package/dist/output-monitor.d.ts +1 -1
- package/dist/output-monitor.d.ts.map +1 -1
- package/dist/output-monitor.js +1 -1
- package/dist/output-monitor.js.map +1 -1
- package/dist/prompt-listing.d.ts +26 -0
- package/dist/prompt-listing.d.ts.map +1 -0
- package/dist/prompt-listing.js +55 -0
- package/dist/prompt-listing.js.map +1 -0
- package/dist/prompt-sections/context-sections.d.ts +32 -0
- package/dist/prompt-sections/context-sections.d.ts.map +1 -0
- package/dist/prompt-sections/context-sections.js +86 -0
- package/dist/prompt-sections/context-sections.js.map +1 -0
- package/dist/prompt-sections/execution-sections.d.ts +82 -0
- package/dist/prompt-sections/execution-sections.d.ts.map +1 -0
- package/dist/prompt-sections/execution-sections.js +601 -0
- package/dist/prompt-sections/execution-sections.js.map +1 -0
- package/dist/prompt-sections/persona-sections.d.ts +133 -0
- package/dist/prompt-sections/persona-sections.d.ts.map +1 -0
- package/dist/prompt-sections/persona-sections.js +317 -0
- package/dist/prompt-sections/persona-sections.js.map +1 -0
- package/dist/prompt-sections/role-sections.d.ts +24 -0
- package/dist/prompt-sections/role-sections.d.ts.map +1 -0
- package/dist/prompt-sections/role-sections.js +78 -0
- package/dist/prompt-sections/role-sections.js.map +1 -0
- package/dist/prompt-sections/shared.d.ts +66 -0
- package/dist/prompt-sections/shared.d.ts.map +1 -0
- package/dist/prompt-sections/shared.js +33 -0
- package/dist/prompt-sections/shared.js.map +1 -0
- package/dist/queries/index.d.ts +13 -0
- package/dist/queries/index.d.ts.map +1 -1
- package/dist/queries/index.js +9 -0
- package/dist/queries/index.js.map +1 -1
- package/dist/resolvers/agent-escalations.d.ts +2 -0
- package/dist/resolvers/agent-escalations.d.ts.map +1 -0
- package/dist/resolvers/agent-escalations.js +33 -0
- package/dist/resolvers/agent-escalations.js.map +1 -0
- package/dist/resolvers/agent-session-summaries.d.ts +2 -0
- package/dist/resolvers/agent-session-summaries.d.ts.map +1 -0
- package/dist/resolvers/agent-session-summaries.js +28 -0
- package/dist/resolvers/agent-session-summaries.js.map +1 -0
- package/dist/resolvers/delivery-acceptance-criteria.d.ts +2 -0
- package/dist/resolvers/delivery-acceptance-criteria.d.ts.map +1 -0
- package/dist/resolvers/delivery-acceptance-criteria.js +19 -0
- package/dist/resolvers/delivery-acceptance-criteria.js.map +1 -0
- package/dist/resolvers/delivery-description.d.ts +2 -0
- package/dist/resolvers/delivery-description.d.ts.map +1 -0
- package/dist/resolvers/delivery-description.js +19 -0
- package/dist/resolvers/delivery-description.js.map +1 -0
- package/dist/resolvers/delivery-issues.d.ts +2 -0
- package/dist/resolvers/delivery-issues.d.ts.map +1 -0
- package/dist/resolvers/delivery-issues.js +58 -0
- package/dist/resolvers/delivery-issues.js.map +1 -0
- package/dist/resolvers/delivery-listing.d.ts +2 -0
- package/dist/resolvers/delivery-listing.d.ts.map +1 -0
- package/dist/resolvers/delivery-listing.js +54 -0
- package/dist/resolvers/delivery-listing.js.map +1 -0
- package/dist/resolvers/delivery-tech-context.d.ts +2 -0
- package/dist/resolvers/delivery-tech-context.d.ts.map +1 -0
- package/dist/resolvers/delivery-tech-context.js +19 -0
- package/dist/resolvers/delivery-tech-context.js.map +1 -0
- package/dist/resolvers/deployment-profile.d.ts +2 -0
- package/dist/resolvers/deployment-profile.d.ts.map +1 -0
- package/dist/resolvers/deployment-profile.js +28 -0
- package/dist/resolvers/deployment-profile.js.map +1 -0
- package/dist/resolvers/focus-anchoring-injections.d.ts +2 -0
- package/dist/resolvers/focus-anchoring-injections.d.ts.map +1 -0
- package/dist/resolvers/focus-anchoring-injections.js +123 -0
- package/dist/resolvers/focus-anchoring-injections.js.map +1 -0
- package/dist/resolvers/focus-context.d.ts +2 -0
- package/dist/resolvers/focus-context.d.ts.map +1 -0
- package/dist/resolvers/focus-context.js +47 -0
- package/dist/resolvers/focus-context.js.map +1 -0
- package/dist/resolvers/focus-injections.d.ts +2 -0
- package/dist/resolvers/focus-injections.d.ts.map +1 -0
- package/dist/resolvers/focus-injections.js +75 -0
- package/dist/resolvers/focus-injections.js.map +1 -0
- package/dist/resolvers/focus-last-review-report.d.ts +2 -0
- package/dist/resolvers/focus-last-review-report.d.ts.map +1 -0
- package/dist/resolvers/focus-last-review-report.js +46 -0
- package/dist/resolvers/focus-last-review-report.js.map +1 -0
- package/dist/resolvers/focus-reality-tree.d.ts +2 -0
- package/dist/resolvers/focus-reality-tree.d.ts.map +1 -0
- package/dist/resolvers/focus-reality-tree.js +50 -0
- package/dist/resolvers/focus-reality-tree.js.map +1 -0
- package/dist/resolvers/git-diff-against-base.d.ts +2 -0
- package/dist/resolvers/git-diff-against-base.d.ts.map +1 -0
- package/dist/resolvers/git-diff-against-base.js +39 -0
- package/dist/resolvers/git-diff-against-base.js.map +1 -0
- package/dist/resolvers/guards-evaluation-results.d.ts +2 -0
- package/dist/resolvers/guards-evaluation-results.d.ts.map +1 -0
- package/dist/resolvers/guards-evaluation-results.js +31 -0
- package/dist/resolvers/guards-evaluation-results.js.map +1 -0
- package/dist/resolvers/index.d.ts +50 -0
- package/dist/resolvers/index.d.ts.map +1 -0
- package/dist/resolvers/index.js +51 -0
- package/dist/resolvers/index.js.map +1 -0
- package/dist/resolvers/loop-context.d.ts +2 -0
- package/dist/resolvers/loop-context.d.ts.map +1 -0
- package/dist/resolvers/loop-context.js +113 -0
- package/dist/resolvers/loop-context.js.map +1 -0
- package/dist/resolvers/loop-delivery-index.d.ts +2 -0
- package/dist/resolvers/loop-delivery-index.d.ts.map +1 -0
- package/dist/resolvers/loop-delivery-index.js +69 -0
- package/dist/resolvers/loop-delivery-index.js.map +1 -0
- package/dist/resolvers/loop-documents.d.ts +2 -0
- package/dist/resolvers/loop-documents.d.ts.map +1 -0
- package/dist/resolvers/loop-documents.js +30 -0
- package/dist/resolvers/loop-documents.js.map +1 -0
- package/dist/resolvers/loop-expected-effects.d.ts +2 -0
- package/dist/resolvers/loop-expected-effects.d.ts.map +1 -0
- package/dist/resolvers/loop-expected-effects.js +68 -0
- package/dist/resolvers/loop-expected-effects.js.map +1 -0
- package/dist/resolvers/loop-frt-statement.d.ts +2 -0
- package/dist/resolvers/loop-frt-statement.d.ts.map +1 -0
- package/dist/resolvers/loop-frt-statement.js +39 -0
- package/dist/resolvers/loop-frt-statement.js.map +1 -0
- package/dist/resolvers/loop-injection.d.ts +2 -0
- package/dist/resolvers/loop-injection.d.ts.map +1 -0
- package/dist/resolvers/loop-injection.js +48 -0
- package/dist/resolvers/loop-injection.js.map +1 -0
- package/dist/resolvers/loop-persona.d.ts +2 -0
- package/dist/resolvers/loop-persona.d.ts.map +1 -0
- package/dist/resolvers/loop-persona.js +40 -0
- package/dist/resolvers/loop-persona.js.map +1 -0
- package/dist/resolvers/loop-questions.d.ts +2 -0
- package/dist/resolvers/loop-questions.d.ts.map +1 -0
- package/dist/resolvers/loop-questions.js +49 -0
- package/dist/resolvers/loop-questions.js.map +1 -0
- package/dist/resolvers/loop-upstream-udes.d.ts +2 -0
- package/dist/resolvers/loop-upstream-udes.d.ts.map +1 -0
- package/dist/resolvers/loop-upstream-udes.js +88 -0
- package/dist/resolvers/loop-upstream-udes.js.map +1 -0
- package/dist/resolvers/reality-metrics.d.ts +2 -0
- package/dist/resolvers/reality-metrics.d.ts.map +1 -0
- package/dist/resolvers/reality-metrics.js +86 -0
- package/dist/resolvers/reality-metrics.js.map +1 -0
- package/dist/resolvers/reality-projections.d.ts +2 -0
- package/dist/resolvers/reality-projections.d.ts.map +1 -0
- package/dist/resolvers/reality-projections.js +44 -0
- package/dist/resolvers/reality-projections.js.map +1 -0
- package/dist/resolvers/reality-tree-snapshot.d.ts +2 -0
- package/dist/resolvers/reality-tree-snapshot.d.ts.map +1 -0
- package/dist/resolvers/reality-tree-snapshot.js +45 -0
- package/dist/resolvers/reality-tree-snapshot.js.map +1 -0
- package/dist/resolvers/retired-injections.d.ts +2 -0
- package/dist/resolvers/retired-injections.d.ts.map +1 -0
- package/dist/resolvers/retired-injections.js +83 -0
- package/dist/resolvers/retired-injections.js.map +1 -0
- package/dist/resolvers/review-outcomes.d.ts +2 -0
- package/dist/resolvers/review-outcomes.d.ts.map +1 -0
- package/dist/resolvers/review-outcomes.js +38 -0
- package/dist/resolvers/review-outcomes.js.map +1 -0
- package/dist/resolvers/security-advisory.d.ts +2 -0
- package/dist/resolvers/security-advisory.d.ts.map +1 -0
- package/dist/resolvers/security-advisory.js +97 -0
- package/dist/resolvers/security-advisory.js.map +1 -0
- package/dist/resolvers/shared/audit.d.ts +19 -0
- package/dist/resolvers/shared/audit.d.ts.map +1 -0
- package/dist/resolvers/shared/audit.js +28 -0
- package/dist/resolvers/shared/audit.js.map +1 -0
- package/dist/resolvers/shared/format.d.ts +6 -0
- package/dist/resolvers/shared/format.d.ts.map +1 -0
- package/dist/resolvers/shared/format.js +17 -0
- package/dist/resolvers/shared/format.js.map +1 -0
- package/dist/resolvers/shared/git-diff.d.ts +14 -0
- package/dist/resolvers/shared/git-diff.d.ts.map +1 -0
- package/dist/resolvers/shared/git-diff.js +30 -0
- package/dist/resolvers/shared/git-diff.js.map +1 -0
- package/dist/resolvers/shared/loop-items.d.ts +30 -0
- package/dist/resolvers/shared/loop-items.d.ts.map +1 -0
- package/dist/resolvers/shared/loop-items.js +7 -0
- package/dist/resolvers/shared/loop-items.js.map +1 -0
- package/dist/resolvers/shared/loop.d.ts +48 -0
- package/dist/resolvers/shared/loop.d.ts.map +1 -0
- package/dist/resolvers/shared/loop.js +38 -0
- package/dist/resolvers/shared/loop.js.map +1 -0
- package/dist/resolvers/shared/reality-metrics.d.ts +63 -0
- package/dist/resolvers/shared/reality-metrics.d.ts.map +1 -0
- package/dist/resolvers/shared/reality-metrics.js +6 -0
- package/dist/resolvers/shared/reality-metrics.js.map +1 -0
- package/dist/resolvers/shared/reality-tree.d.ts +51 -0
- package/dist/resolvers/shared/reality-tree.d.ts.map +1 -0
- package/dist/resolvers/shared/reality-tree.js +125 -0
- package/dist/resolvers/shared/reality-tree.js.map +1 -0
- package/dist/resolvers/shared/wiki.d.ts +60 -0
- package/dist/resolvers/shared/wiki.d.ts.map +1 -0
- package/dist/resolvers/shared/wiki.js +122 -0
- package/dist/resolvers/shared/wiki.js.map +1 -0
- package/dist/resolvers/wiki-search.d.ts +2 -0
- package/dist/resolvers/wiki-search.d.ts.map +1 -0
- package/dist/resolvers/wiki-search.js +23 -0
- package/dist/resolvers/wiki-search.js.map +1 -0
- package/dist/resolvers/wiki-topic.d.ts +2 -0
- package/dist/resolvers/wiki-topic.d.ts.map +1 -0
- package/dist/resolvers/wiki-topic.js +29 -0
- package/dist/resolvers/wiki-topic.js.map +1 -0
- package/dist/resolvers/workflow-stages.d.ts +2 -0
- package/dist/resolvers/workflow-stages.d.ts.map +1 -0
- package/dist/resolvers/workflow-stages.js +26 -0
- package/dist/resolvers/workflow-stages.js.map +1 -0
- package/dist/session-lifecycle.d.ts +2 -2
- package/dist/session-lifecycle.d.ts.map +1 -1
- package/dist/session-lifecycle.js +3 -3
- package/dist/session-lifecycle.js.map +1 -1
- package/dist/{pending-spawn-guard.d.ts → spawner/guards.d.ts} +1 -1
- package/dist/spawner/guards.d.ts.map +1 -0
- package/dist/{pending-spawn-guard.js → spawner/guards.js} +2 -2
- package/dist/spawner/guards.js.map +1 -0
- package/dist/{focus-spawn-helpers.d.ts → spawner/helpers.d.ts} +6 -6
- package/dist/spawner/helpers.d.ts.map +1 -0
- package/dist/{focus-spawn-helpers.js → spawner/helpers.js} +8 -8
- package/dist/spawner/helpers.js.map +1 -0
- package/dist/spawner/index.d.ts +30 -0
- package/dist/spawner/index.d.ts.map +1 -0
- package/dist/spawner/index.js +32 -0
- package/dist/spawner/index.js.map +1 -0
- package/dist/{spawner-lifecycle.d.ts → spawner/lifecycle.d.ts} +3 -3
- package/dist/spawner/lifecycle.d.ts.map +1 -0
- package/dist/{spawner-lifecycle.js → spawner/lifecycle.js} +6 -6
- package/dist/spawner/lifecycle.js.map +1 -0
- package/dist/{spawner-liveness.d.ts → spawner/liveness.d.ts} +2 -2
- package/dist/spawner/liveness.d.ts.map +1 -0
- package/dist/{spawner-liveness.js → spawner/liveness.js} +4 -4
- package/dist/spawner/liveness.js.map +1 -0
- package/dist/{spawner-resolution.d.ts → spawner/resolution.d.ts} +2 -2
- package/dist/spawner/resolution.d.ts.map +1 -0
- package/dist/{spawner-resolution.js → spawner/resolution.js} +2 -2
- package/dist/spawner/resolution.js.map +1 -0
- package/dist/{team-spawner.d.ts → spawner/spawn-team.d.ts} +4 -4
- package/dist/spawner/spawn-team.d.ts.map +1 -0
- package/dist/{team-spawner.js → spawner/spawn-team.js} +19 -19
- package/dist/spawner/spawn-team.js.map +1 -0
- package/dist/{spawner.d.ts → spawner/state.d.ts} +8 -8
- package/dist/spawner/state.d.ts.map +1 -0
- package/dist/{spawner.js → spawner/state.js} +8 -8
- package/dist/spawner/state.js.map +1 -0
- package/dist/{spawner-stream-handlers.d.ts → spawner/stream-handlers.d.ts} +4 -4
- package/dist/spawner/stream-handlers.d.ts.map +1 -0
- package/dist/{spawner-stream-handlers.js → spawner/stream-handlers.js} +7 -7
- package/dist/spawner/stream-handlers.js.map +1 -0
- package/dist/{spawner-timeout.d.ts → spawner/timeout.d.ts} +2 -2
- package/dist/spawner/timeout.d.ts.map +1 -0
- package/dist/{spawner-timeout.js → spawner/timeout.js} +1 -1
- package/dist/spawner/timeout.js.map +1 -0
- package/dist/team-prompt-base.d.ts +16 -287
- package/dist/team-prompt-base.d.ts.map +1 -1
- package/dist/team-prompt-base.js +20 -1112
- package/dist/team-prompt-base.js.map +1 -1
- package/dist/templates/claude-md.d.ts.map +1 -1
- package/dist/templates/claude-md.js +0 -1
- package/dist/templates/claude-md.js.map +1 -1
- package/dist/types/focus.d.ts +1 -1
- package/dist/types/focus.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/completion-detector.d.ts.map +0 -1
- package/dist/completion-detector.js.map +0 -1
- package/dist/completion-handler.d.ts.map +0 -1
- package/dist/completion-handler.js.map +0 -1
- package/dist/focus-completion-event.d.ts.map +0 -1
- package/dist/focus-completion-event.js.map +0 -1
- package/dist/focus-completion.d.ts.map +0 -1
- package/dist/focus-completion.js.map +0 -1
- package/dist/focus-spawn-helpers.d.ts.map +0 -1
- package/dist/focus-spawn-helpers.js.map +0 -1
- package/dist/focus-team-lifecycle.d.ts.map +0 -1
- package/dist/focus-team-lifecycle.js.map +0 -1
- package/dist/pending-spawn-guard.d.ts.map +0 -1
- package/dist/pending-spawn-guard.js.map +0 -1
- package/dist/prompt-builder.d.ts +0 -14
- package/dist/prompt-builder.d.ts.map +0 -1
- package/dist/prompt-builder.js +0 -174
- package/dist/prompt-builder.js.map +0 -1
- package/dist/spawner-lifecycle.d.ts.map +0 -1
- package/dist/spawner-lifecycle.js.map +0 -1
- package/dist/spawner-liveness.d.ts.map +0 -1
- package/dist/spawner-liveness.js.map +0 -1
- package/dist/spawner-resolution.d.ts.map +0 -1
- package/dist/spawner-resolution.js.map +0 -1
- package/dist/spawner-stream-handlers.d.ts.map +0 -1
- package/dist/spawner-stream-handlers.js.map +0 -1
- package/dist/spawner-timeout.d.ts.map +0 -1
- package/dist/spawner-timeout.js.map +0 -1
- package/dist/spawner.d.ts.map +0 -1
- package/dist/spawner.js.map +0 -1
- package/dist/team-spawner.d.ts.map +0 -1
- package/dist/team-spawner.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-delivery injection-bundle helpers shared across the loop.* resolvers
|
|
3
|
+
* (loop.injection, loop.frt_statement, loop.expected_effects,
|
|
4
|
+
* loop.upstream_udes, loop.delivery_index) and focus.anchoring_injections.
|
|
5
|
+
*/
|
|
6
|
+
import type { AssemblyContext } from '../../assembly-engine.js';
|
|
7
|
+
/** Maximum BFS depth for upstream UDE walk in loop.upstream_udes. */
|
|
8
|
+
export declare const MAX_UPSTREAM_DEPTH = 3;
|
|
9
|
+
export interface InjectionContextItemBundle {
|
|
10
|
+
injection: {
|
|
11
|
+
id: string;
|
|
12
|
+
statement: string;
|
|
13
|
+
nodeType: string;
|
|
14
|
+
injectionStatus: string | null;
|
|
15
|
+
frtStatement: string | null;
|
|
16
|
+
frtNodeType: string | null;
|
|
17
|
+
dissolvesObstacle: string | null;
|
|
18
|
+
realityTreeId: string;
|
|
19
|
+
seq: number;
|
|
20
|
+
};
|
|
21
|
+
treeName: string;
|
|
22
|
+
treeId: string;
|
|
23
|
+
/**
|
|
24
|
+
* One-line Now->Target per targeted UDE (from the focus coordination map
|
|
25
|
+
* work): the UDE's current statement and the desired effect it becomes.
|
|
26
|
+
* reality_tree_injection_context populates this.
|
|
27
|
+
*/
|
|
28
|
+
nowTargets?: {
|
|
29
|
+
seq: number;
|
|
30
|
+
now: string;
|
|
31
|
+
target: string | null;
|
|
32
|
+
}[];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Walk context.deliveryIds, return [deliveryId, injectionId] pairs for those
|
|
36
|
+
* with non-empty injection links. Empty array on lookup failure.
|
|
37
|
+
*/
|
|
38
|
+
export declare function getDeliveryInjectionPairs(context: AssemblyContext): Promise<Array<{
|
|
39
|
+
deliveryId: string;
|
|
40
|
+
deliveryName: string;
|
|
41
|
+
injectionId: string;
|
|
42
|
+
}>>;
|
|
43
|
+
/**
|
|
44
|
+
* Fetch a batch of injection nodes by their IDs via reality_tree_injection_context.
|
|
45
|
+
* Returns a Map keyed by injection node id.
|
|
46
|
+
*/
|
|
47
|
+
export declare function fetchInjectionBundles(injectionIds: string[]): Promise<Map<string, InjectionContextItemBundle>>;
|
|
48
|
+
//# sourceMappingURL=loop.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIhE,qEAAqE;AACrE,eAAO,MAAM,kBAAkB,IAAI,CAAC;AAEpC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE;QACT,EAAE,EAAE,MAAM,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAC3B,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,aAAa,EAAE,MAAM,CAAC;QACtB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,UAAU,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACpE;AAOD;;;GAGG;AACH,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,KAAK,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAOnF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAUlD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-delivery injection-bundle helpers shared across the loop.* resolvers
|
|
3
|
+
* (loop.injection, loop.frt_statement, loop.expected_effects,
|
|
4
|
+
* loop.upstream_udes, loop.delivery_index) and focus.anchoring_injections.
|
|
5
|
+
*/
|
|
6
|
+
import { getFocusDeliveries } from '../../queries/focuses.js';
|
|
7
|
+
import { callApi } from '../../queries/shared.js';
|
|
8
|
+
/** Maximum BFS depth for upstream UDE walk in loop.upstream_udes. */
|
|
9
|
+
export const MAX_UPSTREAM_DEPTH = 3;
|
|
10
|
+
/**
|
|
11
|
+
* Walk context.deliveryIds, return [deliveryId, injectionId] pairs for those
|
|
12
|
+
* with non-empty injection links. Empty array on lookup failure.
|
|
13
|
+
*/
|
|
14
|
+
export async function getDeliveryInjectionPairs(context) {
|
|
15
|
+
const deliveries = await getFocusDeliveries(context.focusId);
|
|
16
|
+
const wantedIds = new Set(context.deliveryIds);
|
|
17
|
+
return deliveries
|
|
18
|
+
.filter((d) => wantedIds.has(d.id))
|
|
19
|
+
.filter((d) => typeof d.injectionId === 'string' && d.injectionId.length > 0)
|
|
20
|
+
.map((d) => ({ deliveryId: d.id, deliveryName: d.name, injectionId: d.injectionId }));
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Fetch a batch of injection nodes by their IDs via reality_tree_injection_context.
|
|
24
|
+
* Returns a Map keyed by injection node id.
|
|
25
|
+
*/
|
|
26
|
+
export async function fetchInjectionBundles(injectionIds) {
|
|
27
|
+
const out = new Map();
|
|
28
|
+
if (injectionIds.length === 0)
|
|
29
|
+
return out;
|
|
30
|
+
const resp = await callApi('reality_tree_injection_context', {
|
|
31
|
+
nodeIds: injectionIds,
|
|
32
|
+
});
|
|
33
|
+
for (const item of resp.items ?? []) {
|
|
34
|
+
out.set(item.injection.id, item);
|
|
35
|
+
}
|
|
36
|
+
return out;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=loop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loop.js","sourceRoot":"","sources":["../../../src/resolvers/shared/loop.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAElD,qEAAqE;AACrE,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AA6BpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,OAAwB;IAExB,MAAM,UAAU,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/C,OAAO,UAAU;SACd,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAClC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;SAC5E,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC,WAAqB,EAAE,CAAC,CAAC,CAAC;AACpG,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,YAAsB;IAEtB,MAAM,GAAG,GAAG,IAAI,GAAG,EAAsC,CAAC;IAC1D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAiC,gCAAgC,EAAE;QAC3F,OAAO,EAAE,YAAY;KACtB,CAAC,CAAC;IACH,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,CAAC;QACpC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* reality_metrics_focus response types shared by reality.metrics and
|
|
3
|
+
* reality.projections.
|
|
4
|
+
*/
|
|
5
|
+
export interface RealityMetrics {
|
|
6
|
+
total_deliveries: number;
|
|
7
|
+
deliveries_planning: number;
|
|
8
|
+
deliveries_queued: number;
|
|
9
|
+
deliveries_coding: number;
|
|
10
|
+
deliveries_verify: number;
|
|
11
|
+
deliveries_done: number;
|
|
12
|
+
total_issues: number;
|
|
13
|
+
issues_todo: number;
|
|
14
|
+
issues_in_progress: number;
|
|
15
|
+
issues_done: number;
|
|
16
|
+
issues_blocked: number;
|
|
17
|
+
issues_done_7d: number;
|
|
18
|
+
issues_done_14d: number;
|
|
19
|
+
issues_done_30d: number;
|
|
20
|
+
avg_cycle_time_days: number | null;
|
|
21
|
+
blocked_count: number;
|
|
22
|
+
avg_blocked_duration_days: number | null;
|
|
23
|
+
session_count: number;
|
|
24
|
+
total_agent_cost: number;
|
|
25
|
+
total_agent_duration_seconds: number;
|
|
26
|
+
escalation_count: number;
|
|
27
|
+
last_session_at: string | null;
|
|
28
|
+
merge_count?: number;
|
|
29
|
+
merges_7d?: number;
|
|
30
|
+
merges_30d?: number;
|
|
31
|
+
last_merge_at?: string | null;
|
|
32
|
+
}
|
|
33
|
+
export interface CompletionProjection {
|
|
34
|
+
status: string;
|
|
35
|
+
remainingIssues: number;
|
|
36
|
+
velocity: number | null;
|
|
37
|
+
projectedCompletionDate: string | null;
|
|
38
|
+
daysRemaining: number | null;
|
|
39
|
+
confidence: number | null;
|
|
40
|
+
stalledReason?: string;
|
|
41
|
+
windowDays?: number;
|
|
42
|
+
completedInWindow?: number;
|
|
43
|
+
}
|
|
44
|
+
export interface CostProjection {
|
|
45
|
+
status: string;
|
|
46
|
+
costToDate: number;
|
|
47
|
+
burnRatePerDay: number;
|
|
48
|
+
avgCostPerIssue: number | null;
|
|
49
|
+
remainingIssues: number;
|
|
50
|
+
completedIssues?: number;
|
|
51
|
+
projectedRemainingCost: number | null;
|
|
52
|
+
projectedTotalCost: number | null;
|
|
53
|
+
windowDays?: number;
|
|
54
|
+
}
|
|
55
|
+
export interface RealityApiResponse {
|
|
56
|
+
focusId: string;
|
|
57
|
+
metrics: RealityMetrics | null;
|
|
58
|
+
projections: {
|
|
59
|
+
completion: CompletionProjection | null;
|
|
60
|
+
cost: CostProjection | null;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=reality-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-metrics.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,cAAc;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAC;IACzC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,4BAA4B,EAAE,MAAM,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAC/B,WAAW,EAAE;QACX,UAAU,EAAE,oBAAoB,GAAG,IAAI,CAAC;QACxC,IAAI,EAAE,cAAc,GAAG,IAAI,CAAC;KAC7B,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-metrics.js","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-metrics.ts"],"names":[],"mappings":"AAAA;;;GAGG"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reality-tree row types and dump rendering shared across resolvers
|
|
3
|
+
* (focus.reality_tree, reality_tree.snapshot, focus.anchoring_injections,
|
|
4
|
+
* loop.expected_effects, loop.upstream_udes, retired_injections) and external
|
|
5
|
+
* consumers (ai-inspection-context, verify-restatement, queries/reality-tree).
|
|
6
|
+
*/
|
|
7
|
+
export interface RealityTreeRow {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string | null;
|
|
11
|
+
focusId: string;
|
|
12
|
+
status: 'active' | 'archived';
|
|
13
|
+
}
|
|
14
|
+
export interface RealityTreeListResponse {
|
|
15
|
+
items: RealityTreeRow[];
|
|
16
|
+
totalCount: number;
|
|
17
|
+
}
|
|
18
|
+
export interface RealityNodeRow {
|
|
19
|
+
id: string;
|
|
20
|
+
realityTreeId: string;
|
|
21
|
+
seq: number;
|
|
22
|
+
statement: string;
|
|
23
|
+
nodeType: 'entity' | 'undesired_effect' | 'desired_effect' | 'injection';
|
|
24
|
+
frtStatement: string | null;
|
|
25
|
+
frtNodeType: string | null;
|
|
26
|
+
viewScope: 'both' | 'crt_only' | 'frt_only';
|
|
27
|
+
status: 'active' | 'retired';
|
|
28
|
+
injectionStatus: 'proposed' | 'in_progress' | 'realized' | 'verified' | null;
|
|
29
|
+
dissolvesObstacle: string | null;
|
|
30
|
+
enablesNodeId: string | null;
|
|
31
|
+
evidence: string | null;
|
|
32
|
+
}
|
|
33
|
+
export interface RealityEdgeRow {
|
|
34
|
+
id: string;
|
|
35
|
+
realityTreeId: string;
|
|
36
|
+
fromNodeId: string;
|
|
37
|
+
toNodeId: string;
|
|
38
|
+
edgeType: 'sufficient' | 'and' | 'derived_from' | 'targets';
|
|
39
|
+
}
|
|
40
|
+
export interface NodeListResponse {
|
|
41
|
+
items: RealityNodeRow[];
|
|
42
|
+
totalCount: number;
|
|
43
|
+
}
|
|
44
|
+
export interface EdgeListResponse {
|
|
45
|
+
items: RealityEdgeRow[];
|
|
46
|
+
totalCount: number;
|
|
47
|
+
}
|
|
48
|
+
export declare const CRT_DUMP_BUDGET_CHARS = 10000;
|
|
49
|
+
export declare function renderRealityTreeDump(tree: RealityTreeRow, nodes: RealityNodeRow[], edges: RealityEdgeRow[], budgetChars: number): string;
|
|
50
|
+
export declare const FOCUS_REALITY_TREE_EMPTY_STATE: string;
|
|
51
|
+
//# sourceMappingURL=reality-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-tree.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,GAAG,KAAK,GAAG,cAAc,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACjF,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAEjF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AA2D5C,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,MAAM,CAsER;AAED,eAAO,MAAM,8BAA8B,QAG0C,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reality-tree row types and dump rendering shared across resolvers
|
|
3
|
+
* (focus.reality_tree, reality_tree.snapshot, focus.anchoring_injections,
|
|
4
|
+
* loop.expected_effects, loop.upstream_udes, retired_injections) and external
|
|
5
|
+
* consumers (ai-inspection-context, verify-restatement, queries/reality-tree).
|
|
6
|
+
*/
|
|
7
|
+
export const CRT_DUMP_BUDGET_CHARS = 10_000;
|
|
8
|
+
const NODE_TYPE_HEADINGS = {
|
|
9
|
+
entity: 'Entities',
|
|
10
|
+
undesired_effect: 'Undesired Effects (UDEs)',
|
|
11
|
+
desired_effect: 'Desired Effects (FRT)',
|
|
12
|
+
injection: 'Injections (FRT)',
|
|
13
|
+
};
|
|
14
|
+
const NODE_TYPE_ORDER = [
|
|
15
|
+
'entity',
|
|
16
|
+
'undesired_effect',
|
|
17
|
+
'desired_effect',
|
|
18
|
+
'injection',
|
|
19
|
+
];
|
|
20
|
+
const INJECTION_STATUS_ORDER = [
|
|
21
|
+
'proposed',
|
|
22
|
+
'in_progress',
|
|
23
|
+
'realized',
|
|
24
|
+
'verified',
|
|
25
|
+
];
|
|
26
|
+
const INJECTION_STATUS_HEADINGS = {
|
|
27
|
+
proposed: 'Injections - Proposed',
|
|
28
|
+
in_progress: 'Injections - In Progress',
|
|
29
|
+
realized: 'Injections - Realized',
|
|
30
|
+
verified: 'Injections - Verified',
|
|
31
|
+
};
|
|
32
|
+
function renderNodeLine(n, opts = {}) {
|
|
33
|
+
const tags = [];
|
|
34
|
+
if (n.injectionStatus && !opts.suppressInjectionStatusTag)
|
|
35
|
+
tags.push(n.injectionStatus);
|
|
36
|
+
if (n.viewScope !== 'both')
|
|
37
|
+
tags.push(n.viewScope);
|
|
38
|
+
const tagSuffix = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
|
39
|
+
const evidence = n.evidence ? `\n evidence: ${n.evidence.replace(/\n/g, ' ')}` : '';
|
|
40
|
+
const dissolves = n.dissolvesObstacle ? `\n dissolves: ${n.dissolvesObstacle.replace(/\n/g, ' ')}` : '';
|
|
41
|
+
const frtOverlay = n.frtStatement && n.frtStatement !== n.statement
|
|
42
|
+
? `\n frt: ${n.frtStatement.replace(/\n/g, ' ')}`
|
|
43
|
+
: '';
|
|
44
|
+
return `- #${n.seq} ${n.statement}${tagSuffix}${evidence}${dissolves}${frtOverlay}`;
|
|
45
|
+
}
|
|
46
|
+
function renderEdgeLine(e, nodeBySeq) {
|
|
47
|
+
const from = nodeBySeq.get(e.fromNodeId);
|
|
48
|
+
const to = nodeBySeq.get(e.toNodeId);
|
|
49
|
+
const fromRef = from ? `#${from.seq}` : '?';
|
|
50
|
+
const toRef = to ? `#${to.seq}` : '?';
|
|
51
|
+
return `- ${fromRef} →[${e.edgeType}]→ ${toRef}`;
|
|
52
|
+
}
|
|
53
|
+
export function renderRealityTreeDump(tree, nodes, edges, budgetChars) {
|
|
54
|
+
if (nodes.length === 0)
|
|
55
|
+
return '';
|
|
56
|
+
const nodeById = new Map();
|
|
57
|
+
for (const n of nodes)
|
|
58
|
+
nodeById.set(n.id, n);
|
|
59
|
+
const sections = [];
|
|
60
|
+
sections.push(`### Tree: ${tree.name}`);
|
|
61
|
+
if (tree.description)
|
|
62
|
+
sections.push(tree.description);
|
|
63
|
+
const grouped = {
|
|
64
|
+
entity: [], undesired_effect: [], desired_effect: [], injection: [],
|
|
65
|
+
};
|
|
66
|
+
for (const n of nodes)
|
|
67
|
+
grouped[n.nodeType].push(n);
|
|
68
|
+
for (const list of Object.values(grouped))
|
|
69
|
+
list.sort((a, b) => a.seq - b.seq);
|
|
70
|
+
for (const t of NODE_TYPE_ORDER) {
|
|
71
|
+
const list = grouped[t];
|
|
72
|
+
if (list.length === 0)
|
|
73
|
+
continue;
|
|
74
|
+
if (t === 'injection') {
|
|
75
|
+
const byStatus = new Map();
|
|
76
|
+
const unstatused = [];
|
|
77
|
+
for (const inj of list) {
|
|
78
|
+
if (inj.injectionStatus) {
|
|
79
|
+
const bucket = byStatus.get(inj.injectionStatus) ?? [];
|
|
80
|
+
bucket.push(inj);
|
|
81
|
+
byStatus.set(inj.injectionStatus, bucket);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
unstatused.push(inj);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
for (const status of INJECTION_STATUS_ORDER) {
|
|
88
|
+
const bucket = byStatus.get(status);
|
|
89
|
+
if (!bucket || bucket.length === 0)
|
|
90
|
+
continue;
|
|
91
|
+
sections.push(`\n#### ${INJECTION_STATUS_HEADINGS[status]} (${bucket.length})`);
|
|
92
|
+
sections.push(bucket.map((n) => renderNodeLine(n, { suppressInjectionStatusTag: true })).join('\n'));
|
|
93
|
+
}
|
|
94
|
+
if (unstatused.length > 0) {
|
|
95
|
+
sections.push(`\n#### Injections - Unstatused (${unstatused.length})`);
|
|
96
|
+
sections.push(unstatused.map((n) => renderNodeLine(n)).join('\n'));
|
|
97
|
+
}
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
sections.push(`\n#### ${NODE_TYPE_HEADINGS[t]} (${list.length})`);
|
|
101
|
+
sections.push(list.map((n) => renderNodeLine(n)).join('\n'));
|
|
102
|
+
}
|
|
103
|
+
if (edges.length > 0) {
|
|
104
|
+
const causal = edges.filter((e) => e.edgeType === 'sufficient' || e.edgeType === 'and' || e.edgeType === 'targets');
|
|
105
|
+
if (causal.length > 0) {
|
|
106
|
+
sections.push(`\n#### Causal Edges (${causal.length})`);
|
|
107
|
+
sections.push(causal.map((e) => renderEdgeLine(e, nodeById)).join('\n'));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// Truncate to budget — preserve the heading + at least one section.
|
|
111
|
+
let acc = '';
|
|
112
|
+
for (const section of sections) {
|
|
113
|
+
const candidate = acc.length === 0 ? section : `${acc}\n${section}`;
|
|
114
|
+
if (candidate.length > budgetChars && acc.length > 0) {
|
|
115
|
+
acc += '\n\n_(truncated for token budget)_';
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
acc = candidate;
|
|
119
|
+
}
|
|
120
|
+
return acc;
|
|
121
|
+
}
|
|
122
|
+
export const FOCUS_REALITY_TREE_EMPTY_STATE = '## Focus Reality Tree\n\n_No active reality tree for this focus._ ' +
|
|
123
|
+
'The intent-vs-reality graph (CRT + FRT overlays) has not been built yet -- ' +
|
|
124
|
+
'walk the focus statement and capture UDEs + entities before scoping further work.';
|
|
125
|
+
//# sourceMappingURL=reality-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reality-tree.js","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki retrieval helpers shared across resolvers (focus.context, wiki.search,
|
|
3
|
+
* wiki.topic).
|
|
4
|
+
*/
|
|
5
|
+
export interface WikiSearchHit {
|
|
6
|
+
id: string;
|
|
7
|
+
slug: string;
|
|
8
|
+
title: string;
|
|
9
|
+
summary: string | null;
|
|
10
|
+
status: 'draft' | 'published' | 'archived';
|
|
11
|
+
rank: number;
|
|
12
|
+
updatedAt: string;
|
|
13
|
+
parentId?: string | null;
|
|
14
|
+
path?: string;
|
|
15
|
+
}
|
|
16
|
+
export interface WikiPageBody {
|
|
17
|
+
id: string;
|
|
18
|
+
slug: string;
|
|
19
|
+
title: string;
|
|
20
|
+
summary: string | null;
|
|
21
|
+
content: string;
|
|
22
|
+
status: 'draft' | 'published' | 'archived';
|
|
23
|
+
}
|
|
24
|
+
interface WikiAncestorRef {
|
|
25
|
+
id: string;
|
|
26
|
+
slug: string;
|
|
27
|
+
title: string;
|
|
28
|
+
summary: string | null;
|
|
29
|
+
path: string;
|
|
30
|
+
depthFromRoot: number;
|
|
31
|
+
}
|
|
32
|
+
export declare const WIKI_RETRIEVAL_BUDGET_CHARS = 10000;
|
|
33
|
+
export declare function searchWiki(productId: string, query: string, limit?: number): Promise<WikiSearchHit[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Fetch the deduplicated union of ancestors for a list of hit page ids.
|
|
36
|
+
* Returns root-first ordering (depthFromRoot ascending). Empty array on
|
|
37
|
+
* failure or when no ancestors exist (all hits are roots).
|
|
38
|
+
*/
|
|
39
|
+
export declare function fetchAncestorsForHits(productId: string, pageIds: string[]): Promise<WikiAncestorRef[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Render hits with their content. Performs a context_assemble call -- not
|
|
42
|
+
* for layered assembly, but to surface page bodies via the same edge
|
|
43
|
+
* function endpoint used by the human MCP profile. The caller supplies the
|
|
44
|
+
* queries explicitly.
|
|
45
|
+
*/
|
|
46
|
+
export declare function fetchPageBodies(productId: string, ids: string[]): Promise<Map<string, WikiPageBody>>;
|
|
47
|
+
/**
|
|
48
|
+
* Render a wiki retrieval section. When `ancestors` is non-empty, prepend a
|
|
49
|
+
* "Background Context" block (title + summary only, root-first) above the
|
|
50
|
+
* leaf hits. The ancestors block consumes up to WIKI_ANCESTORS_BUDGET_FRACTION
|
|
51
|
+
* of the total budget; the rest goes to leaf bodies.
|
|
52
|
+
*
|
|
53
|
+
* Design choice: ancestors render as a SEPARATE section above leaves rather
|
|
54
|
+
* than inline with each hit. Inline duplicates ancestors when multiple hits
|
|
55
|
+
* share them, and the agent can reason about the topical neighborhood once
|
|
56
|
+
* rather than per-hit.
|
|
57
|
+
*/
|
|
58
|
+
export declare function renderWikiSection(heading: string, hits: WikiSearchHit[], bodies: Map<string, WikiPageBody>, budgetChars: number, ancestors?: WikiAncestorRef[]): string;
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=wiki.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/wiki.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAOD,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,GAAG,WAAW,GAAG,UAAU,CAAC;CAC5C;AAED,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,2BAA2B,QAAS,CAAC;AAKlD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAYtG;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,eAAe,EAAE,CAAC,CAY5B;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EAAE,GACZ,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAgBpC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,aAAa,EAAE,EACrB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACjC,WAAW,EAAE,MAAM,EACnB,SAAS,GAAE,eAAe,EAAO,GAChC,MAAM,CAyCR"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wiki retrieval helpers shared across resolvers (focus.context, wiki.search,
|
|
3
|
+
* wiki.topic).
|
|
4
|
+
*/
|
|
5
|
+
import { callApi } from '../../queries/shared.js';
|
|
6
|
+
export const WIKI_RETRIEVAL_BUDGET_CHARS = 10_000;
|
|
7
|
+
// Reserve a slice of the budget for the ancestors block. Empirically a few
|
|
8
|
+
// hundred characters per ancestor (title + 1-line summary) is plenty.
|
|
9
|
+
const WIKI_ANCESTORS_BUDGET_FRACTION = 0.25;
|
|
10
|
+
export async function searchWiki(productId, query, limit = 8) {
|
|
11
|
+
try {
|
|
12
|
+
const result = await callApi('wiki_search', {
|
|
13
|
+
productId,
|
|
14
|
+
query,
|
|
15
|
+
limit,
|
|
16
|
+
});
|
|
17
|
+
return result.pages ?? [];
|
|
18
|
+
}
|
|
19
|
+
catch (err) {
|
|
20
|
+
console.warn(`[assembly-engine] wiki_search failed for query "${query}": ${err.message}`);
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Fetch the deduplicated union of ancestors for a list of hit page ids.
|
|
26
|
+
* Returns root-first ordering (depthFromRoot ascending). Empty array on
|
|
27
|
+
* failure or when no ancestors exist (all hits are roots).
|
|
28
|
+
*/
|
|
29
|
+
export async function fetchAncestorsForHits(productId, pageIds) {
|
|
30
|
+
if (pageIds.length === 0)
|
|
31
|
+
return [];
|
|
32
|
+
try {
|
|
33
|
+
const result = await callApi('wiki_ancestors_for_pages', {
|
|
34
|
+
productId,
|
|
35
|
+
pageIds,
|
|
36
|
+
});
|
|
37
|
+
return result.ancestors ?? [];
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
console.warn(`[assembly-engine] wiki_ancestors_for_pages failed: ${err.message}`);
|
|
41
|
+
return [];
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Render hits with their content. Performs a context_assemble call -- not
|
|
46
|
+
* for layered assembly, but to surface page bodies via the same edge
|
|
47
|
+
* function endpoint used by the human MCP profile. The caller supplies the
|
|
48
|
+
* queries explicitly.
|
|
49
|
+
*/
|
|
50
|
+
export async function fetchPageBodies(productId, ids) {
|
|
51
|
+
const bodies = new Map();
|
|
52
|
+
if (ids.length === 0)
|
|
53
|
+
return bodies;
|
|
54
|
+
for (const id of ids) {
|
|
55
|
+
try {
|
|
56
|
+
const result = await callApi('wiki_page_get', {
|
|
57
|
+
productId,
|
|
58
|
+
pageId: id,
|
|
59
|
+
});
|
|
60
|
+
if (result.page)
|
|
61
|
+
bodies.set(result.page.id, result.page);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
console.warn(`[assembly-engine] wiki_page_get failed for ${id}: ${err.message}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return bodies;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Render a wiki retrieval section. When `ancestors` is non-empty, prepend a
|
|
71
|
+
* "Background Context" block (title + summary only, root-first) above the
|
|
72
|
+
* leaf hits. The ancestors block consumes up to WIKI_ANCESTORS_BUDGET_FRACTION
|
|
73
|
+
* of the total budget; the rest goes to leaf bodies.
|
|
74
|
+
*
|
|
75
|
+
* Design choice: ancestors render as a SEPARATE section above leaves rather
|
|
76
|
+
* than inline with each hit. Inline duplicates ancestors when multiple hits
|
|
77
|
+
* share them, and the agent can reason about the topical neighborhood once
|
|
78
|
+
* rather than per-hit.
|
|
79
|
+
*/
|
|
80
|
+
export function renderWikiSection(heading, hits, bodies, budgetChars, ancestors = []) {
|
|
81
|
+
if (hits.length === 0)
|
|
82
|
+
return '';
|
|
83
|
+
const out = [`## ${heading}`];
|
|
84
|
+
let used = out[0].length;
|
|
85
|
+
// Ancestors block. Cumulative budget across the whole block (heading + all
|
|
86
|
+
// ancestor lines), not per-block — so a deep chain can't sneak past the cap
|
|
87
|
+
// by keeping each individual line small.
|
|
88
|
+
if (ancestors.length > 0) {
|
|
89
|
+
const ancestorBudget = Math.floor(budgetChars * WIKI_ANCESTORS_BUDGET_FRACTION);
|
|
90
|
+
const lines = ['\n\n### Background Context', ''];
|
|
91
|
+
let ancestorsUsed = lines[0].length + 1 + lines[1].length; // heading + join separator
|
|
92
|
+
for (const a of ancestors) {
|
|
93
|
+
const summary = (a.summary ?? '').trim();
|
|
94
|
+
const line = summary
|
|
95
|
+
? `- **${a.title}** (${a.path}) — ${summary}`
|
|
96
|
+
: `- **${a.title}** (${a.path})`;
|
|
97
|
+
const next = lines.length === 2 ? line : '\n' + line;
|
|
98
|
+
if (ancestorsUsed + next.length > ancestorBudget)
|
|
99
|
+
break;
|
|
100
|
+
ancestorsUsed += next.length;
|
|
101
|
+
lines.push(next);
|
|
102
|
+
}
|
|
103
|
+
if (lines.length > 2) {
|
|
104
|
+
const block = lines.join('\n');
|
|
105
|
+
out.push(block);
|
|
106
|
+
used += block.length;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Leaf bodies.
|
|
110
|
+
for (const hit of hits) {
|
|
111
|
+
const body = bodies.get(hit.id);
|
|
112
|
+
const content = body?.content?.trim() || hit.summary?.trim() || '';
|
|
113
|
+
const breadcrumb = hit.path && hit.path !== hit.slug ? `\n*path: ${hit.path}*` : '';
|
|
114
|
+
const block = `\n\n### ${hit.title}\n*slug: ${hit.slug}*${breadcrumb}\n\n${content || '_No content yet._'}`;
|
|
115
|
+
if (used + block.length > budgetChars && out.length > 1)
|
|
116
|
+
break;
|
|
117
|
+
out.push(block);
|
|
118
|
+
used += block.length;
|
|
119
|
+
}
|
|
120
|
+
return out.join('');
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=wiki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki.js","sourceRoot":"","sources":["../../../src/resolvers/shared/wiki.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-search.d.ts","sourceRoot":"","sources":["../../src/resolvers/wiki-search.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { registerSourceResolver } from '../assembly-engine.js';
|
|
2
|
+
import { searchWiki, fetchAncestorsForHits, fetchPageBodies, renderWikiSection, WIKI_RETRIEVAL_BUDGET_CHARS, } from './shared/wiki.js';
|
|
3
|
+
/**
|
|
4
|
+
* wiki.search(query=...)
|
|
5
|
+
*
|
|
6
|
+
* Run a free-text wiki search and return ranked, body-included markdown.
|
|
7
|
+
* Stage directives use this to pull in topic-specific pages.
|
|
8
|
+
*/
|
|
9
|
+
registerSourceResolver('wiki.search', async (context, params) => {
|
|
10
|
+
const query = (params.query ?? '').trim();
|
|
11
|
+
const limit = params.limit ? Math.max(1, parseInt(params.limit, 10)) : 6;
|
|
12
|
+
if (!query)
|
|
13
|
+
return '';
|
|
14
|
+
const hits = await searchWiki(context.productId, query, limit);
|
|
15
|
+
if (hits.length === 0)
|
|
16
|
+
return '';
|
|
17
|
+
const [bodies, ancestors] = await Promise.all([
|
|
18
|
+
fetchPageBodies(context.productId, hits.map((h) => h.id)),
|
|
19
|
+
fetchAncestorsForHits(context.productId, hits.map((h) => h.id)),
|
|
20
|
+
]);
|
|
21
|
+
return renderWikiSection(`Wiki: ${query}`, hits, bodies, WIKI_RETRIEVAL_BUDGET_CHARS, ancestors);
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=wiki-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-search.js","sourceRoot":"","sources":["../../src/resolvers/wiki-search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,eAAe,EACf,iBAAiB,EACjB,2BAA2B,GAC5B,MAAM,kBAAkB,CAAC;AAE1B;;;;;GAKG;AACH,sBAAsB,CAAC,aAAa,EAAE,KAAK,EAAE,OAAwB,EAAE,MAA8B,EAAmB,EAAE;IACxH,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IAEtB,MAAM,IAAI,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAC/D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACzD,qBAAqB,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;KAChE,CAAC,CAAC;IACH,OAAO,iBAAiB,CAAC,SAAS,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,2BAA2B,EAAE,SAAS,CAAC,CAAC;AACnG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-topic.d.ts","sourceRoot":"","sources":["../../src/resolvers/wiki-topic.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { registerSourceResolver } from '../assembly-engine.js';
|
|
2
|
+
import { callApi } from '../queries/shared.js';
|
|
3
|
+
/**
|
|
4
|
+
* wiki.topic(slug=...)
|
|
5
|
+
*
|
|
6
|
+
* Hard-pin a single wiki page by slug. No retrieval risk -- if the slug
|
|
7
|
+
* exists, the page is included verbatim. Used by stage directives that
|
|
8
|
+
* need a specific page (e.g., a security checklist).
|
|
9
|
+
*/
|
|
10
|
+
registerSourceResolver('wiki.topic', async (context, params) => {
|
|
11
|
+
const slug = (params.slug ?? '').trim();
|
|
12
|
+
if (!slug)
|
|
13
|
+
return '';
|
|
14
|
+
try {
|
|
15
|
+
const result = await callApi('wiki_page_get', {
|
|
16
|
+
productId: context.productId,
|
|
17
|
+
slug,
|
|
18
|
+
});
|
|
19
|
+
if (!result.page)
|
|
20
|
+
return '';
|
|
21
|
+
const page = result.page;
|
|
22
|
+
return `## Wiki: ${page.title}\n*slug: ${page.slug}*\n\n${page.content || '_No content yet._'}`;
|
|
23
|
+
}
|
|
24
|
+
catch (err) {
|
|
25
|
+
console.warn(`[assembly-engine] wiki.topic(slug=${slug}) failed: ${err.message}`);
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=wiki-topic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wiki-topic.js","sourceRoot":"","sources":["../../src/resolvers/wiki-topic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG/C;;;;;;GAMG;AACH,sBAAsB,CAAC,YAAY,EAAE,KAAK,EAAE,OAAwB,EAAE,MAA8B,EAAmB,EAAE;IACvH,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAgC,eAAe,EAAE;YAC3E,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI;SACL,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,OAAO,YAAY,IAAI,CAAC,KAAK,YAAY,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,OAAO,IAAI,mBAAmB,EAAE,CAAC;IAClG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,qCAAqC,IAAI,aAAc,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7F,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC,CAAC,CAAC"}
|