@blxzer/cursor-trellis 0.3.4 → 0.3.6
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/CHANGELOG.md +46 -0
- package/README.md +13 -13
- package/README.zh-CN.md +1 -1
- package/bin/cstl.js +1 -1
- package/bin/smart-search.js +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +17 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/commands/campaign/canvas-render.d.ts +68 -0
- package/dist/commands/campaign/canvas-render.d.ts.map +1 -0
- package/dist/commands/campaign/canvas-render.js +414 -0
- package/dist/commands/campaign/canvas-render.js.map +1 -0
- package/dist/commands/campaign/compose.d.ts +15 -0
- package/dist/commands/campaign/compose.d.ts.map +1 -0
- package/dist/commands/campaign/compose.js +110 -0
- package/dist/commands/campaign/compose.js.map +1 -0
- package/dist/commands/campaign/index.d.ts +13 -0
- package/dist/commands/campaign/index.d.ts.map +1 -0
- package/dist/commands/campaign/index.js +134 -0
- package/dist/commands/campaign/index.js.map +1 -0
- package/dist/commands/campaign/kind-map.d.ts +6 -0
- package/dist/commands/campaign/kind-map.d.ts.map +1 -0
- package/dist/commands/campaign/kind-map.js +21 -0
- package/dist/commands/campaign/kind-map.js.map +1 -0
- package/dist/commands/campaign/mcp-server.d.ts +6 -0
- package/dist/commands/campaign/mcp-server.d.ts.map +1 -0
- package/dist/commands/campaign/mcp-server.js +167 -0
- package/dist/commands/campaign/mcp-server.js.map +1 -0
- package/dist/commands/campaign/render.d.ts +5 -0
- package/dist/commands/campaign/render.d.ts.map +1 -0
- package/dist/commands/campaign/render.js +103 -0
- package/dist/commands/campaign/render.js.map +1 -0
- package/dist/commands/campaign/trellis-load.d.ts +13 -0
- package/dist/commands/campaign/trellis-load.d.ts.map +1 -0
- package/dist/commands/campaign/trellis-load.js +122 -0
- package/dist/commands/campaign/trellis-load.js.map +1 -0
- package/dist/commands/campaign/types.d.ts +61 -0
- package/dist/commands/campaign/types.d.ts.map +1 -0
- package/dist/commands/campaign/types.js +3 -0
- package/dist/commands/campaign/types.js.map +1 -0
- package/dist/commands/goal/index.d.ts +3 -0
- package/dist/commands/goal/index.d.ts.map +1 -0
- package/dist/commands/goal/index.js +159 -0
- package/dist/commands/goal/index.js.map +1 -0
- package/dist/commands/goal/review.d.ts +6 -0
- package/dist/commands/goal/review.d.ts.map +1 -0
- package/dist/commands/goal/review.js +28 -0
- package/dist/commands/goal/review.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +11 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/rpc/client.d.ts +51 -0
- package/dist/commands/rpc/client.d.ts.map +1 -0
- package/dist/commands/rpc/client.js +147 -0
- package/dist/commands/rpc/client.js.map +1 -0
- package/dist/commands/rpc/index.d.ts +10 -0
- package/dist/commands/rpc/index.d.ts.map +1 -0
- package/dist/commands/rpc/index.js +157 -0
- package/dist/commands/rpc/index.js.map +1 -0
- package/dist/commands/rpc/serve.d.ts +23 -0
- package/dist/commands/rpc/serve.d.ts.map +1 -0
- package/dist/commands/rpc/serve.js +60 -0
- package/dist/commands/rpc/serve.js.map +1 -0
- package/dist/commands/rpc/smoke.d.ts +16 -0
- package/dist/commands/rpc/smoke.d.ts.map +1 -0
- package/dist/commands/rpc/smoke.js +92 -0
- package/dist/commands/rpc/smoke.js.map +1 -0
- package/dist/commands/sdk/index.d.ts +9 -0
- package/dist/commands/sdk/index.d.ts.map +1 -0
- package/dist/commands/sdk/index.js +58 -0
- package/dist/commands/sdk/index.js.map +1 -0
- package/dist/commands/sdk/run.d.ts +42 -0
- package/dist/commands/sdk/run.d.ts.map +1 -0
- package/dist/commands/sdk/run.js +220 -0
- package/dist/commands/sdk/run.js.map +1 -0
- package/dist/commands/sdk/status.d.ts +14 -0
- package/dist/commands/sdk/status.d.ts.map +1 -0
- package/dist/commands/sdk/status.js +69 -0
- package/dist/commands/sdk/status.js.map +1 -0
- package/dist/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +13 -1
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/goal/action-packet.d.ts +89 -0
- package/dist/goal/action-packet.d.ts.map +1 -0
- package/dist/goal/action-packet.js +113 -0
- package/dist/goal/action-packet.js.map +1 -0
- package/dist/goal/audit.d.ts +14 -0
- package/dist/goal/audit.d.ts.map +1 -0
- package/dist/goal/audit.js +12 -0
- package/dist/goal/audit.js.map +1 -0
- package/dist/goal/constants.d.ts +26 -0
- package/dist/goal/constants.d.ts.map +1 -0
- package/dist/goal/constants.js +24 -0
- package/dist/goal/constants.js.map +1 -0
- package/dist/goal/paths.d.ts +8 -0
- package/dist/goal/paths.d.ts.map +1 -0
- package/dist/goal/paths.js +36 -0
- package/dist/goal/paths.js.map +1 -0
- package/dist/goal/preflight.d.ts +21 -0
- package/dist/goal/preflight.d.ts.map +1 -0
- package/dist/goal/preflight.js +97 -0
- package/dist/goal/preflight.js.map +1 -0
- package/dist/goal/review-seam.d.ts +44 -0
- package/dist/goal/review-seam.d.ts.map +1 -0
- package/dist/goal/review-seam.js +153 -0
- package/dist/goal/review-seam.js.map +1 -0
- package/dist/goal/reviewer-rules.d.ts +13 -0
- package/dist/goal/reviewer-rules.d.ts.map +1 -0
- package/dist/goal/reviewer-rules.js +153 -0
- package/dist/goal/reviewer-rules.js.map +1 -0
- package/dist/goal/reviewer.d.ts +9 -0
- package/dist/goal/reviewer.d.ts.map +1 -0
- package/dist/goal/reviewer.js +54 -0
- package/dist/goal/reviewer.js.map +1 -0
- package/dist/goal/runtime.d.ts +32 -0
- package/dist/goal/runtime.d.ts.map +1 -0
- package/dist/goal/runtime.js +242 -0
- package/dist/goal/runtime.js.map +1 -0
- package/dist/goal/sdk-client.d.ts +10 -0
- package/dist/goal/sdk-client.d.ts.map +1 -0
- package/dist/goal/sdk-client.js +34 -0
- package/dist/goal/sdk-client.js.map +1 -0
- package/dist/goal/state.d.ts +40 -0
- package/dist/goal/state.d.ts.map +1 -0
- package/dist/goal/state.js +37 -0
- package/dist/goal/state.js.map +1 -0
- package/dist/goal/task-triggers.d.ts +15 -0
- package/dist/goal/task-triggers.d.ts.map +1 -0
- package/dist/goal/task-triggers.js +23 -0
- package/dist/goal/task-triggers.js.map +1 -0
- package/dist/goal/walls.d.ts +12 -0
- package/dist/goal/walls.d.ts.map +1 -0
- package/dist/goal/walls.js +65 -0
- package/dist/goal/walls.js.map +1 -0
- package/dist/goal/worker-prompt.d.ts +13 -0
- package/dist/goal/worker-prompt.d.ts.map +1 -0
- package/dist/goal/worker-prompt.js +41 -0
- package/dist/goal/worker-prompt.js.map +1 -0
- package/dist/goal/worker.d.ts +42 -0
- package/dist/goal/worker.d.ts.map +1 -0
- package/dist/goal/worker.js +180 -0
- package/dist/goal/worker.js.map +1 -0
- package/dist/migrations/manifests/0.3.5.json +9 -0
- package/dist/migrations/manifests/0.3.6.json +9 -0
- package/dist/templates/common/bundled-skills/smart-search-cli/SKILL.md +35 -29
- package/dist/templates/common/bundled-skills/smart-search-cli/references/cli-contract.md +11 -25
- package/dist/templates/common/commands/continue.md +15 -3
- package/dist/templates/common/skills/check.md +7 -4
- package/dist/templates/cursor/agents/cstl-check.md +1 -0
- package/dist/templates/cursor/fixtures/expected-rules.d.ts.map +1 -1
- package/dist/templates/cursor/fixtures/expected-rules.js +6 -1
- package/dist/templates/cursor/fixtures/expected-rules.js.map +1 -1
- package/dist/templates/cursor/rules/cstl-cursor-modes.mdc +32 -0
- package/dist/templates/cursor/rules/cstl-triage.mdc +2 -4
- package/dist/templates/cursor/rules/retrieval-routing.mdc +26 -7
- package/dist/templates/markdown/agents.md +2 -0
- package/dist/templates/markdown/index.d.ts +3 -0
- package/dist/templates/markdown/index.d.ts.map +1 -1
- package/dist/templates/markdown/index.js +3 -0
- package/dist/templates/markdown/index.js.map +1 -1
- package/dist/templates/markdown/spec/guides/cursor-context-injection-guide.md.txt +38 -21
- package/dist/templates/markdown/spec/guides/cursor-native-modes-guide.md.txt +125 -0
- package/dist/templates/markdown/spec/guides/index.md.txt +107 -104
- package/dist/templates/markdown/spec/guides/injection-budget-guide.md.txt +111 -0
- package/dist/templates/markdown/spec/guides/retrieval-daily-guide.md.txt +38 -6
- package/dist/templates/markdown/spec/guides/verification-strength-guide.md.txt +184 -0
- package/dist/templates/shared-hooks/session-start.py +10 -0
- package/dist/templates/trellis/config.yaml +18 -0
- package/dist/templates/trellis/index.d.ts +5 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +14 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/common/artifact_locale.py +278 -0
- package/dist/templates/trellis/scripts/common/codebase_retrieval_router.py +51 -2
- package/dist/templates/trellis/scripts/common/config.py +39 -0
- package/dist/templates/trellis/scripts/common/injection_budget.py +317 -0
- package/dist/templates/trellis/scripts/common/parent_orchestration.py +500 -5
- package/dist/templates/trellis/scripts/common/retrieval_agent_instructions.py +9 -3
- package/dist/templates/trellis/scripts/common/session_context.py +32 -4
- package/dist/templates/trellis/scripts/common/session_memory.py +26 -0
- package/dist/templates/trellis/scripts/common/subagent_dispatch.py +74 -9
- package/dist/templates/trellis/scripts/common/task_context.py +18 -0
- package/dist/templates/trellis/scripts/common/task_dashboard.py +16 -1
- package/dist/templates/trellis/scripts/common/task_map.py +670 -614
- package/dist/templates/trellis/scripts/common/task_store.py +191 -40
- package/dist/templates/trellis/scripts/common/test_observable_defaults.py +135 -0
- package/dist/templates/trellis/scripts/cursor_retrieval_probe_prompt.md +14 -12
- package/dist/templates/trellis/scripts/generate_dispatch_prompt.py +182 -0
- package/dist/templates/trellis/scripts/injection_budget_probe.py +69 -0
- package/dist/templates/trellis/scripts/retrieval_probe_matrix_template.json +3 -3
- package/dist/templates/trellis/scripts/spec_health_outcomes.py +160 -0
- package/dist/templates/trellis/scripts/task.py +51 -0
- package/dist/templates/trellis/tasks/locale/en/default-prd.md +19 -0
- package/dist/templates/trellis/tasks/locale/zh/default-prd.md +19 -0
- package/dist/templates/trellis/workflow.md +23 -3
- package/dist/utils/codebase-retrieval-router.d.ts.map +1 -1
- package/dist/utils/codebase-retrieval-router.js +14 -0
- package/dist/utils/codebase-retrieval-router.js.map +1 -1
- package/dist/utils/cursor-sdk-gate.d.ts +10 -0
- package/dist/utils/cursor-sdk-gate.d.ts.map +1 -0
- package/dist/utils/cursor-sdk-gate.js +32 -0
- package/dist/utils/cursor-sdk-gate.js.map +1 -0
- package/dist/utils/project-capabilities.d.ts +30 -3
- package/dist/utils/project-capabilities.d.ts.map +1 -1
- package/dist/utils/project-capabilities.js +182 -11
- package/dist/utils/project-capabilities.js.map +1 -1
- package/dist/utils/readiness.d.ts.map +1 -1
- package/dist/utils/readiness.js +26 -0
- package/dist/utils/readiness.js.map +1 -1
- package/package.json +4 -3
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export type SdkRunMode = "mock" | "live";
|
|
2
|
+
export interface SdkRunOptions {
|
|
3
|
+
task: string;
|
|
4
|
+
campaign: string;
|
|
5
|
+
mode: SdkRunMode;
|
|
6
|
+
prompt?: string;
|
|
7
|
+
cwd?: string;
|
|
8
|
+
rpcUrl?: string;
|
|
9
|
+
token?: string;
|
|
10
|
+
noRpc?: boolean;
|
|
11
|
+
/** When set, write dogfood under this absolute path instead of <task>/research/ */
|
|
12
|
+
evidencePath?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SdkRunResult {
|
|
15
|
+
ok: boolean;
|
|
16
|
+
runId: string;
|
|
17
|
+
mode: SdkRunMode;
|
|
18
|
+
taskPath: string;
|
|
19
|
+
evidencePath: string;
|
|
20
|
+
rpc: {
|
|
21
|
+
attempted: boolean;
|
|
22
|
+
ok: boolean;
|
|
23
|
+
url?: string;
|
|
24
|
+
detail: string;
|
|
25
|
+
};
|
|
26
|
+
agent: {
|
|
27
|
+
status: string;
|
|
28
|
+
result: string;
|
|
29
|
+
};
|
|
30
|
+
errors: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build the Agent prompt for SDK RUN. Always prepends an explicit --task binding
|
|
34
|
+
* block so SessionStart "Selected task: none" cannot be misread as unbound.
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildSdkRunPrompt(taskPath: string, userPrompt?: string): string;
|
|
37
|
+
/**
|
|
38
|
+
* Minimal Trellis SDK RUN: bind explicit task path, run mock/live agent, write dogfood, emit RPC.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runSdkRun(options: SdkRunOptions): Promise<SdkRunResult>;
|
|
41
|
+
export declare function runSdkRunCommand(options: SdkRunOptions): Promise<number>;
|
|
42
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/commands/sdk/run.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,CAAC;AAEzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mFAAmF;IACnF,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE;QACH,SAAS,EAAE,OAAO,CAAC;QACnB,EAAE,EAAE,OAAO,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,KAAK,EAAE;QACL,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAqBD;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAeR;AA8HD;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAkE7E;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC,CAuBjB"}
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { randomUUID } from "node:crypto";
|
|
4
|
+
import { campaignBroadcastTopic } from "@blxzer/cursor-trellis-core/rpc";
|
|
5
|
+
import { resolveRpcToken, resolveRpcUrl, rpcPublish, rpcRegister, } from "../rpc/client.js";
|
|
6
|
+
const DEFAULT_PROMPT = "Trellis SDK RUN (S1 worker): confirm task path binding by restating the absolute taskPath; do not call integrate-child or start-execution --approved; summarize readiness in one short paragraph.";
|
|
7
|
+
function resolveTaskPath(taskArg) {
|
|
8
|
+
return path.resolve(process.cwd(), taskArg);
|
|
9
|
+
}
|
|
10
|
+
function assertTaskDir(taskPath) {
|
|
11
|
+
if (!fs.existsSync(taskPath) || !fs.statSync(taskPath).isDirectory()) {
|
|
12
|
+
throw new Error(`Task path is not a directory: ${taskPath}`);
|
|
13
|
+
}
|
|
14
|
+
const prd = path.join(taskPath, "prd.md");
|
|
15
|
+
if (!fs.existsSync(prd)) {
|
|
16
|
+
throw new Error(`Task path missing prd.md (refusing unbound SDK RUN; pass --task <dir> that contains prd.md): ${prd}`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Build the Agent prompt for SDK RUN. Always prepends an explicit --task binding
|
|
21
|
+
* block so SessionStart "Selected task: none" cannot be misread as unbound.
|
|
22
|
+
*/
|
|
23
|
+
export function buildSdkRunPrompt(taskPath, userPrompt) {
|
|
24
|
+
const absoluteTask = path.resolve(taskPath);
|
|
25
|
+
const prdPath = path.join(absoluteTask, "prd.md");
|
|
26
|
+
const instruction = userPrompt?.trim() || DEFAULT_PROMPT;
|
|
27
|
+
return [
|
|
28
|
+
"## SDK RUN task binding (authoritative)",
|
|
29
|
+
`- Bound via CLI \`--task\` (not \`selected_task\` / SessionStart).`,
|
|
30
|
+
`- taskPath (absolute): \`${absoluteTask}\``,
|
|
31
|
+
`- prd.md (absolute): \`${prdPath}\``,
|
|
32
|
+
`- Binding status: **BOUND**.`,
|
|
33
|
+
`- Do **not** report unbound solely because SessionStart says \`Selected task: none\` — that pointer is irrelevant for SDK RUN.`,
|
|
34
|
+
"",
|
|
35
|
+
"## Instructions",
|
|
36
|
+
instruction,
|
|
37
|
+
].join("\n");
|
|
38
|
+
}
|
|
39
|
+
async function runMockAgent(prompt) {
|
|
40
|
+
return {
|
|
41
|
+
status: "completed",
|
|
42
|
+
result: `[mock] SDK RUN accepted prompt (${prompt.length} chars). No @cursor/sdk call. CAP: safe-task/SDK only; no Parent integrate.`,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async function runLiveAgent(prompt, cwd) {
|
|
46
|
+
const { promptCursorAgent } = await import("../../goal/sdk-client.js");
|
|
47
|
+
return promptCursorAgent(prompt, cwd);
|
|
48
|
+
}
|
|
49
|
+
function writeDogfoodEvidence(options) {
|
|
50
|
+
const dir = path.dirname(options.evidencePath);
|
|
51
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
52
|
+
const body = `# SDK RUN dogfood
|
|
53
|
+
|
|
54
|
+
generated: ${new Date().toISOString()}
|
|
55
|
+
runId: \`${options.result.runId}\`
|
|
56
|
+
mode: \`${options.result.mode}\`
|
|
57
|
+
taskPath: \`${options.result.taskPath}\`
|
|
58
|
+
|
|
59
|
+
## Agent
|
|
60
|
+
|
|
61
|
+
- status: \`${options.result.agent.status}\`
|
|
62
|
+
- result:
|
|
63
|
+
|
|
64
|
+
\`\`\`text
|
|
65
|
+
${options.result.agent.result}
|
|
66
|
+
\`\`\`
|
|
67
|
+
|
|
68
|
+
## RPC
|
|
69
|
+
|
|
70
|
+
- attempted: ${options.result.rpc.attempted}
|
|
71
|
+
- ok: ${options.result.rpc.ok}
|
|
72
|
+
- url: ${options.result.rpc.url ?? "(none)"}
|
|
73
|
+
- detail: ${options.result.rpc.detail}
|
|
74
|
+
|
|
75
|
+
## CAP / HITL
|
|
76
|
+
|
|
77
|
+
- Claim: SDK / safe-task automation RUN only
|
|
78
|
+
- Does **not** call \`task.py start-execution --approved\` or \`integrate-child\`
|
|
79
|
+
- Not an IDE chat tab
|
|
80
|
+
|
|
81
|
+
## Errors
|
|
82
|
+
|
|
83
|
+
${options.result.errors.length === 0
|
|
84
|
+
? "(none)"
|
|
85
|
+
: options.result.errors.map((e) => `- ${e}`).join("\n")}
|
|
86
|
+
`;
|
|
87
|
+
fs.writeFileSync(options.evidencePath, body, "utf-8");
|
|
88
|
+
}
|
|
89
|
+
async function emitRpcEvents(options) {
|
|
90
|
+
const from = { kind: "sdk", id: options.runId };
|
|
91
|
+
const topic = campaignBroadcastTopic(options.campaign);
|
|
92
|
+
const reg = await rpcRegister({
|
|
93
|
+
url: options.url,
|
|
94
|
+
kind: from.kind,
|
|
95
|
+
id: from.id,
|
|
96
|
+
campaignId: options.campaign,
|
|
97
|
+
token: options.token,
|
|
98
|
+
});
|
|
99
|
+
if (reg.error) {
|
|
100
|
+
return {
|
|
101
|
+
ok: false,
|
|
102
|
+
detail: `register failed: ${reg.error.code} ${reg.error.message}`,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
const body = {
|
|
106
|
+
event: "trellis.child.state",
|
|
107
|
+
taskPath: options.taskPath,
|
|
108
|
+
mode: options.mode,
|
|
109
|
+
status: options.status,
|
|
110
|
+
runId: options.runId,
|
|
111
|
+
clientKind: "sdk",
|
|
112
|
+
};
|
|
113
|
+
const published = await rpcPublish({
|
|
114
|
+
url: options.url,
|
|
115
|
+
from,
|
|
116
|
+
topic,
|
|
117
|
+
campaignId: options.campaign,
|
|
118
|
+
body,
|
|
119
|
+
token: options.token,
|
|
120
|
+
});
|
|
121
|
+
if (published.error) {
|
|
122
|
+
return {
|
|
123
|
+
ok: false,
|
|
124
|
+
detail: `publish failed: ${published.error.code} ${published.error.message}`,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
const delivered = typeof published.payload.delivered === "number"
|
|
128
|
+
? published.payload.delivered
|
|
129
|
+
: 0;
|
|
130
|
+
return {
|
|
131
|
+
ok: true,
|
|
132
|
+
detail: `registered sdk:${options.runId}; published ${topic} (delivered=${delivered})`,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Minimal Trellis SDK RUN: bind explicit task path, run mock/live agent, write dogfood, emit RPC.
|
|
137
|
+
*/
|
|
138
|
+
export async function runSdkRun(options) {
|
|
139
|
+
const errors = [];
|
|
140
|
+
const runId = randomUUID().slice(0, 8);
|
|
141
|
+
const taskPath = resolveTaskPath(options.task);
|
|
142
|
+
assertTaskDir(taskPath);
|
|
143
|
+
const cwd = options.cwd ? path.resolve(options.cwd) : process.cwd();
|
|
144
|
+
const prompt = buildSdkRunPrompt(taskPath, options.prompt);
|
|
145
|
+
const evidencePath = options.evidencePath ??
|
|
146
|
+
path.join(taskPath, "research", "sdk-run-dogfood.md");
|
|
147
|
+
let agent;
|
|
148
|
+
if (options.mode === "live") {
|
|
149
|
+
agent = await runLiveAgent(prompt, cwd);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
agent = await runMockAgent(prompt);
|
|
153
|
+
}
|
|
154
|
+
let rpc = {
|
|
155
|
+
attempted: false,
|
|
156
|
+
ok: false,
|
|
157
|
+
detail: "skipped (--no-rpc)",
|
|
158
|
+
};
|
|
159
|
+
if (!options.noRpc) {
|
|
160
|
+
const url = resolveRpcUrl(options.rpcUrl);
|
|
161
|
+
const token = resolveRpcToken(options.token);
|
|
162
|
+
rpc = { attempted: true, ok: false, url, detail: "" };
|
|
163
|
+
try {
|
|
164
|
+
const outcome = await emitRpcEvents({
|
|
165
|
+
url,
|
|
166
|
+
token,
|
|
167
|
+
runId,
|
|
168
|
+
campaign: options.campaign,
|
|
169
|
+
taskPath,
|
|
170
|
+
mode: options.mode,
|
|
171
|
+
status: agent.status,
|
|
172
|
+
});
|
|
173
|
+
rpc.ok = outcome.ok;
|
|
174
|
+
rpc.detail = outcome.detail;
|
|
175
|
+
if (!outcome.ok) {
|
|
176
|
+
errors.push(`rpc: ${outcome.detail}`);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
181
|
+
rpc.ok = false;
|
|
182
|
+
rpc.detail = `unavailable: ${message}`;
|
|
183
|
+
errors.push(`rpc: ${rpc.detail}`);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
const partial = {
|
|
187
|
+
runId,
|
|
188
|
+
mode: options.mode,
|
|
189
|
+
taskPath,
|
|
190
|
+
evidencePath,
|
|
191
|
+
rpc,
|
|
192
|
+
agent,
|
|
193
|
+
errors,
|
|
194
|
+
};
|
|
195
|
+
writeDogfoodEvidence({ evidencePath, result: partial });
|
|
196
|
+
// RPC degrade is allowed (LAYERED); validation failures already threw.
|
|
197
|
+
const ok = options.mode === "mock" || agent.status.length > 0;
|
|
198
|
+
return { ok, ...partial };
|
|
199
|
+
}
|
|
200
|
+
export async function runSdkRunCommand(options) {
|
|
201
|
+
try {
|
|
202
|
+
const result = await runSdkRun(options);
|
|
203
|
+
if (result.ok) {
|
|
204
|
+
console.log(`SDK RUN OK mode=${result.mode} runId=${result.runId} task=${result.taskPath}`);
|
|
205
|
+
console.log(`evidence: ${result.evidencePath}`);
|
|
206
|
+
console.log(`rpc: ${result.rpc.detail}`);
|
|
207
|
+
if (result.errors.length > 0) {
|
|
208
|
+
console.warn(`notes: ${result.errors.join("; ")}`);
|
|
209
|
+
}
|
|
210
|
+
return 0;
|
|
211
|
+
}
|
|
212
|
+
console.error(`SDK RUN FAILED: ${result.errors.join("; ") || "unknown"}`);
|
|
213
|
+
return 1;
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
console.error("SDK RUN error:", error instanceof Error ? error.message : error);
|
|
217
|
+
return 1;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/commands/sdk/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type SdkStatusResult = {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
cwd: string;
|
|
4
|
+
keyPresent: boolean;
|
|
5
|
+
capabilitySelected: boolean;
|
|
6
|
+
sdkModuleResolvable: boolean | null;
|
|
7
|
+
nextSteps: string[];
|
|
8
|
+
};
|
|
9
|
+
export declare function collectSdkStatus(cwd?: string): Promise<SdkStatusResult>;
|
|
10
|
+
export declare function runSdkStatusCommand(options?: {
|
|
11
|
+
cwd?: string;
|
|
12
|
+
json?: boolean;
|
|
13
|
+
}): Promise<number>;
|
|
14
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/commands/sdk/status.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAeF,wBAAsB,gBAAgB,CACpC,GAAG,GAAE,MAAsB,GAC1B,OAAO,CAAC,eAAe,CAAC,CAoC1B;AAED,wBAAsB,mBAAmB,CAAC,OAAO,CAAC,EAAE;IAClD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,MAAM,CAAC,CAmClB"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { cursorApiKeySetupGuide, hasCursorApiKey, } from "../../utils/cursor-sdk-gate.js";
|
|
4
|
+
import { loadProjectCapabilities } from "../../utils/project-capabilities.js";
|
|
5
|
+
async function probeSdkModuleResolvable() {
|
|
6
|
+
try {
|
|
7
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
8
|
+
await dynamicImport("@cursor/sdk");
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export async function collectSdkStatus(cwd = process.cwd()) {
|
|
16
|
+
const keyPresent = hasCursorApiKey();
|
|
17
|
+
const selected = loadProjectCapabilities(cwd);
|
|
18
|
+
const capabilitySelected = selected.includes("cursor-sdk");
|
|
19
|
+
const sdkModuleResolvable = await probeSdkModuleResolvable();
|
|
20
|
+
const nextSteps = [];
|
|
21
|
+
if (!keyPresent) {
|
|
22
|
+
nextSteps.push("Set CURSOR_API_KEY in this process, then re-run `cstl sdk status` or re-select `cursor-sdk` during init/update.");
|
|
23
|
+
nextSteps.push("Use `cstl sdk run --task <path> --mock` without a key.");
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
nextSteps.push("Key present. You may enable `cursor-sdk` at init/update and use `cstl sdk run --task <path> --live` after accepting billing/privacy risk.");
|
|
27
|
+
}
|
|
28
|
+
if (!capabilitySelected && fs.existsSync(path.join(cwd, ".cstl"))) {
|
|
29
|
+
nextSteps.push("Project has `.cstl/` but `cursor-sdk` is not in `.cstl/capabilities.json` selected list.");
|
|
30
|
+
}
|
|
31
|
+
if (sdkModuleResolvable === false) {
|
|
32
|
+
nextSteps.push("@cursor/sdk could not be imported from this CLI install; reinstall cursor-trellis / @blxzer/cursor-trellis.");
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
ok: keyPresent,
|
|
36
|
+
cwd,
|
|
37
|
+
keyPresent,
|
|
38
|
+
capabilitySelected,
|
|
39
|
+
sdkModuleResolvable,
|
|
40
|
+
nextSteps,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
export async function runSdkStatusCommand(options) {
|
|
44
|
+
const cwd = options?.cwd ? path.resolve(options.cwd) : process.cwd();
|
|
45
|
+
const status = await collectSdkStatus(cwd);
|
|
46
|
+
if (options?.json) {
|
|
47
|
+
console.log(JSON.stringify(status, null, 2));
|
|
48
|
+
return status.keyPresent ? 0 : 1;
|
|
49
|
+
}
|
|
50
|
+
console.log("Cursor SDK status");
|
|
51
|
+
console.log(` cwd: ${status.cwd}`);
|
|
52
|
+
console.log(` CURSOR_API_KEY: ${status.keyPresent ? "present" : "missing"} (value never printed)`);
|
|
53
|
+
console.log(` capability cursor-sdk selected: ${status.capabilitySelected ? "yes" : "no"}`);
|
|
54
|
+
console.log(` @cursor/sdk importable from CLI: ${status.sdkModuleResolvable === null
|
|
55
|
+
? "unknown"
|
|
56
|
+
: status.sdkModuleResolvable
|
|
57
|
+
? "yes"
|
|
58
|
+
: "no"}`);
|
|
59
|
+
console.log(" next steps:");
|
|
60
|
+
for (const step of status.nextSteps) {
|
|
61
|
+
console.log(` - ${step}`);
|
|
62
|
+
}
|
|
63
|
+
if (!status.keyPresent) {
|
|
64
|
+
console.log("");
|
|
65
|
+
console.log(cursorApiKeySetupGuide());
|
|
66
|
+
}
|
|
67
|
+
return status.keyPresent ? 0 : 1;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/commands/sdk/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"AA+CA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AAOtC;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yCAAyC;IACzC,WAAW,EAAE,WAAW,CAAC;IACzB,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,kBAAkB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IACjC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,IAAI,CAAC,CA2Df"}
|
|
@@ -8,7 +8,7 @@ backendIndexContent, backendDirectoryStructureContent, backendDatabaseGuidelines
|
|
|
8
8
|
// Frontend structure (multi-doc)
|
|
9
9
|
frontendIndexContent, frontendDirectoryStructureContent, frontendTypeSafetyContent, frontendHookGuidelinesContent, frontendComponentGuidelinesContent, frontendQualityGuidelinesContent, frontendStateManagementContent,
|
|
10
10
|
// Guides structure
|
|
11
|
-
guidesIndexContent, guidesCrossLayerThinkingGuideContent, guidesCodeReuseThinkingGuideContent, guidesDurableLearningDecisionGuideContent, guidesRetrievalDailyGuideContent, guidesCursorSemanticComplianceContent, guidesCursorSubagentPolicyContent, guidesExecutionStrategyContent, guidesCursorContextInjectionGuideContent, } from "../templates/markdown/index.js";
|
|
11
|
+
guidesIndexContent, guidesCrossLayerThinkingGuideContent, guidesCodeReuseThinkingGuideContent, guidesDurableLearningDecisionGuideContent, guidesRetrievalDailyGuideContent, guidesCursorSemanticComplianceContent, guidesCursorSubagentPolicyContent, guidesExecutionStrategyContent, guidesCursorContextInjectionGuideContent, guidesCursorNativeModesGuideContent, guidesVerificationStrengthGuideContent, guidesInjectionBudgetGuideContent, } from "../templates/markdown/index.js";
|
|
12
12
|
import { writeFile, ensureDir } from "../utils/file-writer.js";
|
|
13
13
|
import { replacePythonCommandLiterals } from "./shared.js";
|
|
14
14
|
import { writeCursor2plusLocalBundle } from "./cursor2plus-local.js";
|
|
@@ -177,6 +177,18 @@ async function createSpecTemplates(cwd, projectType, packages, remoteSpecPackage
|
|
|
177
177
|
name: "cursor-context-injection-guide.md",
|
|
178
178
|
content: guidesCursorContextInjectionGuideContent,
|
|
179
179
|
},
|
|
180
|
+
{
|
|
181
|
+
name: "cursor-native-modes-guide.md",
|
|
182
|
+
content: guidesCursorNativeModesGuideContent,
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
name: "verification-strength-guide.md",
|
|
186
|
+
content: guidesVerificationStrengthGuideContent,
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
name: "injection-budget-guide.md",
|
|
190
|
+
content: guidesInjectionBudgetGuideContent,
|
|
191
|
+
},
|
|
180
192
|
];
|
|
181
193
|
for (const doc of guidesDocs) {
|
|
182
194
|
await writeFile(path.join(guidesDir, doc.name), doc.content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,+BAA+B,CAAC;AAEvC,4BAA4B;AAC5B,OAAO,EACL,yBAAyB;AACzB,gCAAgC;AAChC,mBAAmB,EACnB,gCAAgC,EAChC,gCAAgC,EAChC,+BAA+B,EAC/B,+BAA+B,EAC/B,2BAA2B;AAC3B,iCAAiC;AACjC,oBAAoB,EACpB,iCAAiC,EACjC,yBAAyB,EACzB,6BAA6B,EAC7B,kCAAkC,EAClC,gCAAgC,EAChC,8BAA8B;AAC9B,mBAAmB;AACnB,kBAAkB,EAClB,oCAAoC,EACpC,mCAAmC,EACnC,yCAAyC,EACzC,gCAAgC,EAChC,qCAAqC,EACrC,iCAAiC,EACjC,8BAA8B,EAC9B,wCAAwC,
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/configurators/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Parent lock v0 — shared with reviewer Child. */
|
|
3
|
+
export declare const GOAL_ACTION_PACKET_SCHEMA_VERSION: 1;
|
|
4
|
+
export declare const HARD_DENY_IDS: readonly ["H-1", "H-2", "H-3", "H-4", "H-5", "H-6"];
|
|
5
|
+
export type HardDenyId = (typeof HARD_DENY_IDS)[number];
|
|
6
|
+
export declare const REVIEW_DECISIONS: readonly ["allow", "allow_with_constraints", "deny_suggest_alternative", "uncertain"];
|
|
7
|
+
export type ReviewDecision = (typeof REVIEW_DECISIONS)[number];
|
|
8
|
+
declare const axesSchema: z.ZodObject<{
|
|
9
|
+
A: z.ZodBoolean;
|
|
10
|
+
B: z.ZodBoolean;
|
|
11
|
+
C: z.ZodBoolean;
|
|
12
|
+
}, z.core.$strip>;
|
|
13
|
+
export declare const goalActionPacketSchema: z.ZodObject<{
|
|
14
|
+
schema_version: z.ZodLiteral<1>;
|
|
15
|
+
goal_id: z.ZodString;
|
|
16
|
+
task_dir: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
17
|
+
proposed_action: z.ZodString;
|
|
18
|
+
action_kind: z.ZodString;
|
|
19
|
+
axes: z.ZodObject<{
|
|
20
|
+
A: z.ZodBoolean;
|
|
21
|
+
B: z.ZodBoolean;
|
|
22
|
+
C: z.ZodBoolean;
|
|
23
|
+
}, z.core.$strip>;
|
|
24
|
+
hard_deny_candidates: z.ZodArray<z.ZodString>;
|
|
25
|
+
done_when_ref: z.ZodString;
|
|
26
|
+
diff_or_cmd_digest: z.ZodString;
|
|
27
|
+
constraints_hint: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
28
|
+
}, z.core.$strip>;
|
|
29
|
+
export declare const goalReviewDecisionSchema: z.ZodObject<{
|
|
30
|
+
schema_version: z.ZodLiteral<1>;
|
|
31
|
+
decision: z.ZodEnum<{
|
|
32
|
+
allow: "allow";
|
|
33
|
+
allow_with_constraints: "allow_with_constraints";
|
|
34
|
+
deny_suggest_alternative: "deny_suggest_alternative";
|
|
35
|
+
uncertain: "uncertain";
|
|
36
|
+
}>;
|
|
37
|
+
axes: z.ZodObject<{
|
|
38
|
+
A: z.ZodBoolean;
|
|
39
|
+
B: z.ZodBoolean;
|
|
40
|
+
C: z.ZodBoolean;
|
|
41
|
+
}, z.core.$strip>;
|
|
42
|
+
hard_deny_hit: z.ZodNullable<z.ZodString>;
|
|
43
|
+
constraints: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
44
|
+
alternative: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
45
|
+
rationale: z.ZodString;
|
|
46
|
+
l1_ready: z.ZodObject<{
|
|
47
|
+
time: z.ZodString;
|
|
48
|
+
action: z.ZodString;
|
|
49
|
+
axes: z.ZodObject<{
|
|
50
|
+
A: z.ZodBoolean;
|
|
51
|
+
B: z.ZodBoolean;
|
|
52
|
+
C: z.ZodBoolean;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
reviewer: z.ZodString;
|
|
55
|
+
decision: z.ZodString;
|
|
56
|
+
rollback_hint: z.ZodString;
|
|
57
|
+
}, z.core.$strip>;
|
|
58
|
+
h3_allowed: z.ZodOptional<z.ZodBoolean>;
|
|
59
|
+
valid: z.ZodOptional<z.ZodBoolean>;
|
|
60
|
+
invalid_reason: z.ZodOptional<z.ZodString>;
|
|
61
|
+
}, z.core.$strip>;
|
|
62
|
+
export type GoalAxes = z.infer<typeof axesSchema>;
|
|
63
|
+
export type GoalActionPacket = z.infer<typeof goalActionPacketSchema>;
|
|
64
|
+
export type GoalReviewDecision = z.infer<typeof goalReviewDecisionSchema>;
|
|
65
|
+
export declare function parseGoalActionPacket(input: unknown): GoalActionPacket;
|
|
66
|
+
export declare function safeParseGoalActionPacket(input: unknown): {
|
|
67
|
+
valid: true;
|
|
68
|
+
packet: GoalActionPacket;
|
|
69
|
+
} | {
|
|
70
|
+
valid: false;
|
|
71
|
+
invalid_reason: string;
|
|
72
|
+
};
|
|
73
|
+
export declare function parseGoalReviewDecision(input: unknown): GoalReviewDecision;
|
|
74
|
+
export declare function isValidReviewDecision(decision: GoalReviewDecision): {
|
|
75
|
+
valid: true;
|
|
76
|
+
} | {
|
|
77
|
+
valid: false;
|
|
78
|
+
reason: string;
|
|
79
|
+
};
|
|
80
|
+
export declare function deriveH3Allowed(decision: GoalReviewDecision): boolean;
|
|
81
|
+
export declare function validateGoalReviewDecision(input: unknown): {
|
|
82
|
+
valid: true;
|
|
83
|
+
decision: GoalReviewDecision;
|
|
84
|
+
} | {
|
|
85
|
+
valid: false;
|
|
86
|
+
invalid_reason: string;
|
|
87
|
+
};
|
|
88
|
+
export {};
|
|
89
|
+
//# sourceMappingURL=action-packet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-packet.d.ts","sourceRoot":"","sources":["../../src/goal/action-packet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,mDAAmD;AACnD,eAAO,MAAM,iCAAiC,EAAG,CAAU,CAAC;AAE5D,eAAO,MAAM,aAAa,qDAOhB,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAExD,eAAO,MAAM,gBAAgB,uFAKnB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,QAAA,MAAM,UAAU;;;;iBAId,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;iBAWjC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBnC,CAAC;AAEH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAClD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB,CAEtE;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,OAAO,GACb;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,gBAAgB,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAStF;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAM1E;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,kBAAkB,GAC3B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAepD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAKrE;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAc1F"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Parent lock v0 — shared with reviewer Child. */
|
|
3
|
+
export const GOAL_ACTION_PACKET_SCHEMA_VERSION = 1;
|
|
4
|
+
export const HARD_DENY_IDS = [
|
|
5
|
+
"H-1",
|
|
6
|
+
"H-2",
|
|
7
|
+
"H-3",
|
|
8
|
+
"H-4",
|
|
9
|
+
"H-5",
|
|
10
|
+
"H-6",
|
|
11
|
+
];
|
|
12
|
+
export const REVIEW_DECISIONS = [
|
|
13
|
+
"allow",
|
|
14
|
+
"allow_with_constraints",
|
|
15
|
+
"deny_suggest_alternative",
|
|
16
|
+
"uncertain",
|
|
17
|
+
];
|
|
18
|
+
const axesSchema = z.object({
|
|
19
|
+
A: z.boolean(),
|
|
20
|
+
B: z.boolean(),
|
|
21
|
+
C: z.boolean(),
|
|
22
|
+
});
|
|
23
|
+
export const goalActionPacketSchema = z.object({
|
|
24
|
+
schema_version: z.literal(GOAL_ACTION_PACKET_SCHEMA_VERSION),
|
|
25
|
+
goal_id: z.string().min(1),
|
|
26
|
+
task_dir: z.string().nullable().optional(),
|
|
27
|
+
proposed_action: z.string().min(1),
|
|
28
|
+
action_kind: z.string().min(1),
|
|
29
|
+
axes: axesSchema,
|
|
30
|
+
hard_deny_candidates: z.array(z.string()),
|
|
31
|
+
done_when_ref: z.string().min(1),
|
|
32
|
+
diff_or_cmd_digest: z.string().min(1),
|
|
33
|
+
constraints_hint: z.string().nullable().optional(),
|
|
34
|
+
});
|
|
35
|
+
export const goalReviewDecisionSchema = z.object({
|
|
36
|
+
schema_version: z.literal(GOAL_ACTION_PACKET_SCHEMA_VERSION),
|
|
37
|
+
decision: z.enum(REVIEW_DECISIONS),
|
|
38
|
+
axes: axesSchema,
|
|
39
|
+
hard_deny_hit: z.string().nullable(),
|
|
40
|
+
constraints: z.array(z.string()).optional(),
|
|
41
|
+
alternative: z.string().nullable().optional(),
|
|
42
|
+
rationale: z.string().min(1),
|
|
43
|
+
l1_ready: z.object({
|
|
44
|
+
time: z.string().min(1),
|
|
45
|
+
action: z.string().min(1),
|
|
46
|
+
axes: axesSchema,
|
|
47
|
+
reviewer: z.string().min(1),
|
|
48
|
+
decision: z.string().min(1),
|
|
49
|
+
rollback_hint: z.string().min(1),
|
|
50
|
+
}),
|
|
51
|
+
h3_allowed: z.boolean().optional(),
|
|
52
|
+
valid: z.boolean().optional(),
|
|
53
|
+
invalid_reason: z.string().optional(),
|
|
54
|
+
});
|
|
55
|
+
export function parseGoalActionPacket(input) {
|
|
56
|
+
return goalActionPacketSchema.parse(input);
|
|
57
|
+
}
|
|
58
|
+
export function safeParseGoalActionPacket(input) {
|
|
59
|
+
const parsed = goalActionPacketSchema.safeParse(input);
|
|
60
|
+
if (!parsed.success) {
|
|
61
|
+
return {
|
|
62
|
+
valid: false,
|
|
63
|
+
invalid_reason: parsed.error.issues.map((i) => i.message).join("; "),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return { valid: true, packet: parsed.data };
|
|
67
|
+
}
|
|
68
|
+
export function parseGoalReviewDecision(input) {
|
|
69
|
+
const parsed = goalReviewDecisionSchema.parse(input);
|
|
70
|
+
if (parsed.hard_deny_hit != null && parsed.h3_allowed === true) {
|
|
71
|
+
throw new Error("invalid decision: hard_deny_hit set but h3_allowed is true");
|
|
72
|
+
}
|
|
73
|
+
return parsed;
|
|
74
|
+
}
|
|
75
|
+
export function isValidReviewDecision(decision) {
|
|
76
|
+
if (decision.valid === false) {
|
|
77
|
+
return { valid: false, reason: decision.invalid_reason ?? "marked invalid" };
|
|
78
|
+
}
|
|
79
|
+
const l1 = decision.l1_ready;
|
|
80
|
+
if (!l1.time || !l1.action || !l1.reviewer || !l1.decision || !l1.rollback_hint) {
|
|
81
|
+
return { valid: false, reason: "incomplete l1_ready" };
|
|
82
|
+
}
|
|
83
|
+
if (!decision.decision || !decision.axes) {
|
|
84
|
+
return { valid: false, reason: "missing decision or axes" };
|
|
85
|
+
}
|
|
86
|
+
if (decision.hard_deny_hit != null && decision.h3_allowed === true) {
|
|
87
|
+
return { valid: false, reason: "hard_deny_hit set but h3_allowed is true" };
|
|
88
|
+
}
|
|
89
|
+
return { valid: true };
|
|
90
|
+
}
|
|
91
|
+
export function deriveH3Allowed(decision) {
|
|
92
|
+
if (decision.hard_deny_hit != null) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
return decision.decision === "uncertain";
|
|
96
|
+
}
|
|
97
|
+
export function validateGoalReviewDecision(input) {
|
|
98
|
+
try {
|
|
99
|
+
const decision = parseGoalReviewDecision(input);
|
|
100
|
+
const check = isValidReviewDecision(decision);
|
|
101
|
+
if (!check.valid) {
|
|
102
|
+
return { valid: false, invalid_reason: check.reason };
|
|
103
|
+
}
|
|
104
|
+
return { valid: true, decision };
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
return {
|
|
108
|
+
valid: false,
|
|
109
|
+
invalid_reason: error instanceof Error ? error.message : String(error),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=action-packet.js.map
|