opensquid 0.5.412 → 0.5.426
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/functions/event.d.ts.map +1 -1
- package/dist/functions/event.js +30 -0
- package/dist/functions/event.js.map +1 -1
- package/dist/functions/index.d.ts +2 -0
- package/dist/functions/index.d.ts.map +1 -1
- package/dist/functions/index.js +2 -0
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/read_rubric.d.ts +27 -0
- package/dist/functions/read_rubric.d.ts.map +1 -0
- package/dist/functions/read_rubric.js +53 -0
- package/dist/functions/read_rubric.js.map +1 -0
- package/dist/functions/rubric_pre_inject.d.ts +22 -0
- package/dist/functions/rubric_pre_inject.d.ts.map +1 -0
- package/dist/functions/rubric_pre_inject.js +58 -0
- package/dist/functions/rubric_pre_inject.js.map +1 -0
- package/dist/functions/shell_parse.d.ts +41 -0
- package/dist/functions/shell_parse.d.ts.map +1 -0
- package/dist/functions/shell_parse.js +185 -0
- package/dist/functions/shell_parse.js.map +1 -0
- package/dist/mcp/server.js +14 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/ralph.d.ts +21 -0
- package/dist/mcp/tools/ralph.d.ts.map +1 -0
- package/dist/mcp/tools/ralph.js +18 -0
- package/dist/mcp/tools/ralph.js.map +1 -0
- package/dist/mcp/tools/workgraph.d.ts +11 -0
- package/dist/mcp/tools/workgraph.d.ts.map +1 -1
- package/dist/mcp/tools/workgraph.js +7 -0
- package/dist/mcp/tools/workgraph.js.map +1 -1
- package/dist/runtime/bootstrap.d.ts.map +1 -1
- package/dist/runtime/bootstrap.js +4 -0
- package/dist/runtime/bootstrap.js.map +1 -1
- package/dist/runtime/ralph/decision_classifier.d.ts +18 -0
- package/dist/runtime/ralph/decision_classifier.d.ts.map +1 -0
- package/dist/runtime/ralph/decision_classifier.js +72 -0
- package/dist/runtime/ralph/decision_classifier.js.map +1 -0
- package/dist/runtime/ralph/escalate_lap.d.ts +31 -0
- package/dist/runtime/ralph/escalate_lap.d.ts.map +1 -0
- package/dist/runtime/ralph/escalate_lap.js +22 -0
- package/dist/runtime/ralph/escalate_lap.js.map +1 -0
- package/dist/runtime/ralph/escalator.d.ts +34 -0
- package/dist/runtime/ralph/escalator.d.ts.map +1 -0
- package/dist/runtime/ralph/escalator.js +19 -0
- package/dist/runtime/ralph/escalator.js.map +1 -0
- package/dist/runtime/ralph/lap_outcome.d.ts +43 -0
- package/dist/runtime/ralph/lap_outcome.d.ts.map +1 -0
- package/dist/runtime/ralph/lap_outcome.js +119 -0
- package/dist/runtime/ralph/lap_outcome.js.map +1 -0
- package/dist/runtime/ralph/orchestrator.d.ts +71 -0
- package/dist/runtime/ralph/orchestrator.d.ts.map +1 -0
- package/dist/runtime/ralph/orchestrator.js +74 -0
- package/dist/runtime/ralph/orchestrator.js.map +1 -0
- package/dist/runtime/ralph/ralph_template.d.ts +18 -0
- package/dist/runtime/ralph/ralph_template.d.ts.map +1 -0
- package/dist/runtime/ralph/ralph_template.js +61 -0
- package/dist/runtime/ralph/ralph_template.js.map +1 -0
- package/dist/runtime/ralph/supervisor.d.ts +30 -0
- package/dist/runtime/ralph/supervisor.d.ts.map +1 -0
- package/dist/runtime/ralph/supervisor.js +24 -0
- package/dist/runtime/ralph/supervisor.js.map +1 -0
- package/dist/setup/cli/ralph.d.ts +20 -0
- package/dist/setup/cli/ralph.d.ts.map +1 -0
- package/dist/setup/cli/ralph.js +168 -0
- package/dist/setup/cli/ralph.js.map +1 -0
- package/dist/setup/wizard/ralph_writer.d.ts +98 -0
- package/dist/setup/wizard/ralph_writer.d.ts.map +1 -0
- package/dist/setup/wizard/ralph_writer.js +114 -0
- package/dist/setup/wizard/ralph_writer.js.map +1 -0
- package/dist/workgraph/audience.d.ts +12 -0
- package/dist/workgraph/audience.d.ts.map +1 -0
- package/dist/workgraph/audience.js +10 -0
- package/dist/workgraph/audience.js.map +1 -0
- package/dist/workgraph/events.d.ts.map +1 -1
- package/dist/workgraph/events.js +34 -0
- package/dist/workgraph/events.js.map +1 -1
- package/dist/workgraph/store.d.ts.map +1 -1
- package/dist/workgraph/store.js +86 -12
- package/dist/workgraph/store.js.map +1 -1
- package/dist/workgraph/types.d.ts +33 -2
- package/dist/workgraph/types.d.ts.map +1 -1
- package/docs/rubric/author.md +17 -0
- package/docs/rubric/scope.md +16 -0
- package/package.json +3 -2
- package/packs/builtin/coding-flow/skills/entry-and-handoffs/skill.yaml +9 -0
- package/packs/builtin/coding-flow/skills/execute-gate/skill.yaml +9 -10
- package/packs/builtin/coding-flow/skills/scope-lifecycle/skill.yaml +67 -50
- package/packs/builtin/default-discipline/manifest.yaml +6 -3
- package/packs/builtin/default-discipline/skills/workflow/skill.yaml +7 -3
- package/packs/builtin/pack-architect/SKILL.md +10 -0
- package/packs/builtin/pack-architect/skills/skill-yaml-author-walkthrough/skill.yaml +7 -0
- package/packs/builtin/scope-architect/team.yaml +5 -2
package/dist/cli.js
CHANGED
|
@@ -43,6 +43,7 @@ import { registerLimits } from './setup/cli/limits.js';
|
|
|
43
43
|
import { registerSetupWizardMcp } from './setup/cli/mcp.js';
|
|
44
44
|
import { registerMemory } from './setup/cli/memory.js';
|
|
45
45
|
import { registerPermissions } from './setup/cli/permissions.js';
|
|
46
|
+
import { registerRalph } from './setup/cli/ralph.js';
|
|
46
47
|
import { registerSchedule } from './setup/cli/schedule.js';
|
|
47
48
|
import { registerTraceCommand } from './setup/cli/trace.js';
|
|
48
49
|
import { registerTriggers } from './setup/cli/triggers.js';
|
|
@@ -165,6 +166,7 @@ function runCli() {
|
|
|
165
166
|
// declared in pack manifests). No dispatcher wired here yet — `run` records
|
|
166
167
|
// a force-fire entry and the daemon picks it up via subsequent integration.
|
|
167
168
|
registerSchedule(program);
|
|
169
|
+
registerRalph(program);
|
|
168
170
|
// OBSERVE.2 — `opensquid trace <runId> | tail | export <runId>`.
|
|
169
171
|
// Registered via a sibling module to keep the verb tree's commander wiring
|
|
170
172
|
// + libsql client lifecycle ownership out of `cli.ts`.
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/functions/event.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;
|
|
1
|
+
{"version":3,"file":"event.d.ts","sourceRoot":"","sources":["../../src/functions/event.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AA2CtD,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAuHvE"}
|
package/dist/functions/event.js
CHANGED
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
*/
|
|
33
33
|
import { z } from 'zod';
|
|
34
34
|
import { err, ok } from '../runtime/result.js';
|
|
35
|
+
import { commandInvokes } from './shell_parse.js';
|
|
35
36
|
// ---------------------------------------------------------------------------
|
|
36
37
|
// Zod arg schemas — `.strict()` on EmptyArgs so unexpected keys become
|
|
37
38
|
// `arg_invalid` at registry-call time (better than silently ignoring typos
|
|
@@ -43,6 +44,15 @@ const MatchCommandArgs = z.object({
|
|
|
43
44
|
pattern: z.string(),
|
|
44
45
|
target: z.string().optional(),
|
|
45
46
|
});
|
|
47
|
+
// command_invokes args: gate on a real `program` invocation (+ optional subcommand /
|
|
48
|
+
// flag). `.strict()` so a YAML typo surfaces as arg_invalid (matches EmptyArgs).
|
|
49
|
+
const CommandInvokesArgs = z
|
|
50
|
+
.object({
|
|
51
|
+
program: z.string(),
|
|
52
|
+
subcommand: z.string().optional(),
|
|
53
|
+
flag_any: z.array(z.string()).optional(),
|
|
54
|
+
})
|
|
55
|
+
.strict();
|
|
46
56
|
// ---------------------------------------------------------------------------
|
|
47
57
|
// resolveCommandField — shallow `tool_args.<field>` lookup for match_command.
|
|
48
58
|
//
|
|
@@ -160,5 +170,25 @@ export function registerEventFunctions(registry) {
|
|
|
160
170
|
return ok(regex.test(command));
|
|
161
171
|
},
|
|
162
172
|
});
|
|
173
|
+
// command_invokes — the STRUCTURAL replacement for the git-matcher use of
|
|
174
|
+
// `match_command` (wg-52e57e2ed252). Instead of regex-testing the raw command
|
|
175
|
+
// string (which false-fires on `git commit` inside a grep pattern / echo arg /
|
|
176
|
+
// quoted subprocess prompt), it parses the command into real shell segments
|
|
177
|
+
// and gates on whether any segment INVOKES `program` (basename) with the
|
|
178
|
+
// optional subcommand + flag. Pure delegate to `shell_parse.commandInvokes`.
|
|
179
|
+
// Wrong-kind → ok(false), matching `match_command`.
|
|
180
|
+
registry.register({
|
|
181
|
+
name: 'command_invokes',
|
|
182
|
+
argSchema: CommandInvokesArgs,
|
|
183
|
+
durable: false,
|
|
184
|
+
memoizable: false,
|
|
185
|
+
costEstimateMs: 0.1,
|
|
186
|
+
execute: async ({ program, subcommand, flag_any }, ctx) => {
|
|
187
|
+
if (ctx.event.kind !== 'tool_call')
|
|
188
|
+
return ok(false);
|
|
189
|
+
const command = resolveCommandField(ctx.event.args, undefined);
|
|
190
|
+
return ok(commandInvokes(command, { program, subcommand, flagAny: flag_any }));
|
|
191
|
+
},
|
|
192
|
+
});
|
|
163
193
|
}
|
|
164
194
|
//# sourceMappingURL=event.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/functions/event.ts"],"names":[],"mappings":"AAAA,qDAAqD;AACrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"event.js","sourceRoot":"","sources":["../../src/functions/event.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ export { registerLessonFunctions } from './lessons.js';
|
|
|
14
14
|
export { registerLlmFunctions } from './llm.js';
|
|
15
15
|
export { registerRagFunctions } from './rag.js';
|
|
16
16
|
export { registerRecallPreInjectFunction } from './recall_pre_inject.js';
|
|
17
|
+
export { registerReadRubric, readRubricContent } from './read_rubric.js';
|
|
18
|
+
export { registerRubricPreInject } from './rubric_pre_inject.js';
|
|
17
19
|
export { registerStateFunctions } from './state.js';
|
|
18
20
|
export { registerVerdictFunctions } from './verdict.js';
|
|
19
21
|
export { registerDestinationCheckFunction, type CheckDestinationResult, } from './destination_check.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,gCAAgC,EAChC,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,gCAAgC,EAChC,KAAK,sBAAsB,GAC5B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,oBAAoB,GAC1B,MAAM,eAAe,CAAC;AAKvB,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC"}
|
package/dist/functions/index.js
CHANGED
|
@@ -14,6 +14,8 @@ export { registerLessonFunctions } from './lessons.js';
|
|
|
14
14
|
export { registerLlmFunctions } from './llm.js';
|
|
15
15
|
export { registerRagFunctions } from './rag.js';
|
|
16
16
|
export { registerRecallPreInjectFunction } from './recall_pre_inject.js';
|
|
17
|
+
export { registerReadRubric, readRubricContent } from './read_rubric.js';
|
|
18
|
+
export { registerRubricPreInject } from './rubric_pre_inject.js';
|
|
17
19
|
export { registerStateFunctions } from './state.js';
|
|
18
20
|
export { registerVerdictFunctions } from './verdict.js';
|
|
19
21
|
export { registerDestinationCheckFunction, } from './destination_check.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,gCAAgC,GAEjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,GAMzB,MAAM,eAAe,CAAC;AACvB,4EAA4E;AAC5E,sEAAsE;AACtE,sEAAsE;AACtE,uDAAuD;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,sFAAsF;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,+BAA+B,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,EACL,gCAAgC,GAEjC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,wBAAwB,GAMzB,MAAM,eAAe,CAAC;AACvB,4EAA4E;AAC5E,sEAAsE;AACtE,sEAAsE;AACtE,uDAAuD;AACvD,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,yBAAyB,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AAChE,sFAAsF;AACtF,OAAO,EAAE,8BAA8B,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,oCAAoC,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `read_rubric` primitive + the bare `readRubricContent` reader (T-transfer-audit-rubric TR.A,
|
|
3
|
+
* wg-2d1d8698f563).
|
|
4
|
+
*
|
|
5
|
+
* Single-sources the coding-flow audit rubric: the canonical criteria live in `docs/rubric/{scope,author}.md`
|
|
6
|
+
* (shipped via package.json `files[]`), read WHOLE by name. The guess/spec audits interpolate `{{rubric}}`
|
|
7
|
+
* from this (de-duping the former hardcoded prompt copy — docs/lexicon.md:40), and `rubric_pre_inject` (TR.B)
|
|
8
|
+
* delivers the same content to the agent before authoring. Edit a fragment → both reflect it (the audit's
|
|
9
|
+
* sha256(prompt) cache invalidates because the rubric content is interpolated INTO the prompt).
|
|
10
|
+
*
|
|
11
|
+
* Resolution is MODULE-RELATIVE to the opensquid package (precedent: src/runtime/paths.ts,
|
|
12
|
+
* src/runtime/update_check.ts use fileURLToPath(import.meta.url)) — NOT cwd / CLAUDE_PROJECT_DIR, so the
|
|
13
|
+
* recurring sub-repo-vs-umbrella cwd split cannot misresolve it. Compiled to dist/functions/read_rubric.js,
|
|
14
|
+
* so `../..` is the package root, where the shipped `docs/rubric/` lives.
|
|
15
|
+
*
|
|
16
|
+
* FAIL-LOUD: on file-miss / path-misresolve / over-cap the reader returns `null` — it NEVER throws and NEVER
|
|
17
|
+
* truncates. Callers fail loud: the audit blocks via a `rubric == null` precondition (so it never runs
|
|
18
|
+
* rubric-less); the injection injects nothing. (project-memory-scope-isolation: fail-loud, not silent.)
|
|
19
|
+
*/
|
|
20
|
+
import type { FunctionRegistry } from './registry.js';
|
|
21
|
+
/**
|
|
22
|
+
* Bare reader — reused by `rubric_pre_inject` (TR.B) and wrapped by the primitive below. Returns the whole
|
|
23
|
+
* fragment, or `null` on file-miss / path-misresolve / over-cap. Never throws, never truncates.
|
|
24
|
+
*/
|
|
25
|
+
export declare function readRubricContent(name: 'scope' | 'author'): Promise<string | null>;
|
|
26
|
+
export declare function registerReadRubric(registry: FunctionRegistry): void;
|
|
27
|
+
//# sourceMappingURL=read_rubric.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_rubric.d.ts","sourceRoot":"","sources":["../../src/functions/read_rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAUtD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAOxF;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CASnE"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `read_rubric` primitive + the bare `readRubricContent` reader (T-transfer-audit-rubric TR.A,
|
|
3
|
+
* wg-2d1d8698f563).
|
|
4
|
+
*
|
|
5
|
+
* Single-sources the coding-flow audit rubric: the canonical criteria live in `docs/rubric/{scope,author}.md`
|
|
6
|
+
* (shipped via package.json `files[]`), read WHOLE by name. The guess/spec audits interpolate `{{rubric}}`
|
|
7
|
+
* from this (de-duping the former hardcoded prompt copy — docs/lexicon.md:40), and `rubric_pre_inject` (TR.B)
|
|
8
|
+
* delivers the same content to the agent before authoring. Edit a fragment → both reflect it (the audit's
|
|
9
|
+
* sha256(prompt) cache invalidates because the rubric content is interpolated INTO the prompt).
|
|
10
|
+
*
|
|
11
|
+
* Resolution is MODULE-RELATIVE to the opensquid package (precedent: src/runtime/paths.ts,
|
|
12
|
+
* src/runtime/update_check.ts use fileURLToPath(import.meta.url)) — NOT cwd / CLAUDE_PROJECT_DIR, so the
|
|
13
|
+
* recurring sub-repo-vs-umbrella cwd split cannot misresolve it. Compiled to dist/functions/read_rubric.js,
|
|
14
|
+
* so `../..` is the package root, where the shipped `docs/rubric/` lives.
|
|
15
|
+
*
|
|
16
|
+
* FAIL-LOUD: on file-miss / path-misresolve / over-cap the reader returns `null` — it NEVER throws and NEVER
|
|
17
|
+
* truncates. Callers fail loud: the audit blocks via a `rubric == null` precondition (so it never runs
|
|
18
|
+
* rubric-less); the injection injects nothing. (project-memory-scope-isolation: fail-loud, not silent.)
|
|
19
|
+
*/
|
|
20
|
+
import { readFile } from 'node:fs/promises';
|
|
21
|
+
import { dirname, join } from 'node:path';
|
|
22
|
+
import { fileURLToPath } from 'node:url';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
import { ok } from '../runtime/result.js';
|
|
25
|
+
/** Generous sanity ceiling, well above the few-KB prose rubric; over-cap → null (never a partial read). */
|
|
26
|
+
const MAX_RUBRIC = 64_000;
|
|
27
|
+
const ReadRubricArgs = z.object({ name: z.enum(['scope', 'author']) }).strict();
|
|
28
|
+
// dist/functions/read_rubric.js → ../.. = the package root (where the shipped docs/rubric/ lives).
|
|
29
|
+
const PKG_ROOT = join(dirname(fileURLToPath(import.meta.url)), '..', '..');
|
|
30
|
+
/**
|
|
31
|
+
* Bare reader — reused by `rubric_pre_inject` (TR.B) and wrapped by the primitive below. Returns the whole
|
|
32
|
+
* fragment, or `null` on file-miss / path-misresolve / over-cap. Never throws, never truncates.
|
|
33
|
+
*/
|
|
34
|
+
export async function readRubricContent(name) {
|
|
35
|
+
try {
|
|
36
|
+
const content = await readFile(join(PKG_ROOT, 'docs', 'rubric', `${name}.md`), 'utf8');
|
|
37
|
+
return content.length > MAX_RUBRIC ? null : content;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export function registerReadRubric(registry) {
|
|
44
|
+
registry.register({
|
|
45
|
+
name: 'read_rubric',
|
|
46
|
+
argSchema: ReadRubricArgs,
|
|
47
|
+
durable: false,
|
|
48
|
+
memoizable: false, // re-read each call so a rubric edit is reflected (S-C)
|
|
49
|
+
costEstimateMs: 1,
|
|
50
|
+
execute: async ({ name }) => ok(await readRubricContent(name)),
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=read_rubric.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"read_rubric.js","sourceRoot":"","sources":["../../src/functions/read_rubric.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAI1C,2GAA2G;AAC3G,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAEhF,mGAAmG;AACnG,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE3E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAwB;IAC9D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QACvF,OAAO,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA0B;IAC3D,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,aAAa;QACnB,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK,EAAE,wDAAwD;QAC3E,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAC;KAC/D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rubric_pre_inject` primitive (T-transfer-audit-rubric TR.B, wg-2d1d8698f563).
|
|
3
|
+
*
|
|
4
|
+
* Delivers the coding-flow quality rubric to the agent BEFORE it authors — the fix for the
|
|
5
|
+
* "blind first draft" root cause. Modeled on `recall_pre_inject`: on a `prompt_submit` event, when the
|
|
6
|
+
* coding-flow FSM is in an active SCOPE/AUTHOR phase, it returns a `{ kind: 'inject_context', content }`
|
|
7
|
+
* payload that `dispatch.ts` emits as Claude Code's `hookSpecificOutput.additionalContext` at UserPromptSubmit.
|
|
8
|
+
*
|
|
9
|
+
* Injects the FULL rubric (BOTH scope + author), NOT phase-gated to one: `prompt_submit` fires per USER PROMPT
|
|
10
|
+
* while phases advance MID-TURN on writes, so under run-to-exhaustion the whole SCOPE→AUTHOR flow is one turn
|
|
11
|
+
* with no intervening prompt — one injection must cover every phase the turn will traverse. The hosting rule
|
|
12
|
+
* is ordered AFTER `enter-scoping` in `entry-and-handoffs` so the cold kickoff turn's just-armed `scoping` is
|
|
13
|
+
* visible (rules walk file-order). If the flow isn't armed (idle / non-coding), nothing injects — and no audit
|
|
14
|
+
* fires either, so no rubric is owed.
|
|
15
|
+
*
|
|
16
|
+
* Reuses `readRubricContent` (TR.A) — ONE canonical source for the audit AND the agent. Fail-loud has no
|
|
17
|
+
* meaning here (this is advisory injection, not a gate): a null fragment simply injects nothing; the audit
|
|
18
|
+
* (the blocker) fail-louds on the same condition.
|
|
19
|
+
*/
|
|
20
|
+
import type { FunctionRegistry } from './registry.js';
|
|
21
|
+
export declare function registerRubricPreInject(registry: FunctionRegistry): void;
|
|
22
|
+
//# sourceMappingURL=rubric_pre_inject.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubric_pre_inject.d.ts","sourceRoot":"","sources":["../../src/functions/rubric_pre_inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAQtD,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CA0BxE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `rubric_pre_inject` primitive (T-transfer-audit-rubric TR.B, wg-2d1d8698f563).
|
|
3
|
+
*
|
|
4
|
+
* Delivers the coding-flow quality rubric to the agent BEFORE it authors — the fix for the
|
|
5
|
+
* "blind first draft" root cause. Modeled on `recall_pre_inject`: on a `prompt_submit` event, when the
|
|
6
|
+
* coding-flow FSM is in an active SCOPE/AUTHOR phase, it returns a `{ kind: 'inject_context', content }`
|
|
7
|
+
* payload that `dispatch.ts` emits as Claude Code's `hookSpecificOutput.additionalContext` at UserPromptSubmit.
|
|
8
|
+
*
|
|
9
|
+
* Injects the FULL rubric (BOTH scope + author), NOT phase-gated to one: `prompt_submit` fires per USER PROMPT
|
|
10
|
+
* while phases advance MID-TURN on writes, so under run-to-exhaustion the whole SCOPE→AUTHOR flow is one turn
|
|
11
|
+
* with no intervening prompt — one injection must cover every phase the turn will traverse. The hosting rule
|
|
12
|
+
* is ordered AFTER `enter-scoping` in `entry-and-handoffs` so the cold kickoff turn's just-armed `scoping` is
|
|
13
|
+
* visible (rules walk file-order). If the flow isn't armed (idle / non-coding), nothing injects — and no audit
|
|
14
|
+
* fires either, so no rubric is owed.
|
|
15
|
+
*
|
|
16
|
+
* Reuses `readRubricContent` (TR.A) — ONE canonical source for the audit AND the agent. Fail-loud has no
|
|
17
|
+
* meaning here (this is advisory injection, not a gate): a null fragment simply injects nothing; the audit
|
|
18
|
+
* (the blocker) fail-louds on the same condition.
|
|
19
|
+
*/
|
|
20
|
+
import { z } from 'zod';
|
|
21
|
+
import { readFsmStateRaw } from '../runtime/fsm_state.js';
|
|
22
|
+
import { ok } from '../runtime/result.js';
|
|
23
|
+
import { readRubricContent } from './read_rubric.js';
|
|
24
|
+
// Active SCOPE/AUTHOR authoring phases (packs/builtin/coding-flow/fsm.yaml:15-18). `researched` is the
|
|
25
|
+
// pre-spec-write window where the first spec is authored (spec_drafted fires ON the write).
|
|
26
|
+
const ACTIVE = new Set(['scoping', 'researching', 'researched', 'spec_authored']);
|
|
27
|
+
const EmptyArgs = z.object({}).strict();
|
|
28
|
+
export function registerRubricPreInject(registry) {
|
|
29
|
+
registry.register({
|
|
30
|
+
name: 'rubric_pre_inject',
|
|
31
|
+
argSchema: EmptyArgs,
|
|
32
|
+
durable: false,
|
|
33
|
+
memoizable: false,
|
|
34
|
+
costEstimateMs: 2,
|
|
35
|
+
execute: async (_args, ctx) => {
|
|
36
|
+
if (ctx.event.kind !== 'prompt_submit')
|
|
37
|
+
return ok(null);
|
|
38
|
+
const st = await readFsmStateRaw(ctx.sessionId, 'coding-flow'); // null on unstarted/unreadable
|
|
39
|
+
if (st === null || !ACTIVE.has(st))
|
|
40
|
+
return ok(null); // FSM-active gate
|
|
41
|
+
const scope = await readRubricContent('scope');
|
|
42
|
+
const author = await readRubricContent('author');
|
|
43
|
+
if (scope === null && author === null)
|
|
44
|
+
return ok(null);
|
|
45
|
+
const content = [
|
|
46
|
+
'## Coding-flow quality rubric — the bar the SCOPE/AUTHOR gates will apply (hold it BEFORE you author)',
|
|
47
|
+
'',
|
|
48
|
+
'### SCOPE (pre-research / scope artifacts)',
|
|
49
|
+
scope ?? '_(scope rubric unavailable)_',
|
|
50
|
+
'',
|
|
51
|
+
'### AUTHOR (task specs)',
|
|
52
|
+
author ?? '_(author rubric unavailable)_',
|
|
53
|
+
].join('\n');
|
|
54
|
+
return ok({ kind: 'inject_context', content });
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=rubric_pre_inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rubric_pre_inject.js","sourceRoot":"","sources":["../../src/functions/rubric_pre_inject.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAC;AAE1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,uGAAuG;AACvG,4FAA4F;AAC5F,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AAElF,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC;AAExC,MAAM,UAAU,uBAAuB,CAAC,QAA0B;IAChE,QAAQ,CAAC,QAAQ,CAAC;QAChB,IAAI,EAAE,mBAAmB;QACzB,SAAS,EAAE,SAAS;QACpB,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;QACjB,cAAc,EAAE,CAAC;QACjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,eAAe;gBAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YACxD,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,+BAA+B;YAC/F,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB;YACvE,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjD,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI;gBAAE,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG;gBACd,uGAAuG;gBACvG,EAAE;gBACF,4CAA4C;gBAC5C,KAAK,IAAI,8BAA8B;gBACvC,EAAE;gBACF,yBAAyB;gBACzB,MAAM,IAAI,+BAA+B;aAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,gBAAyB,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quote-aware shell tokenizer + git-invocation predicate. Pure, deterministic, total.
|
|
3
|
+
*
|
|
4
|
+
* Backs the `command_invokes` event primitive (src/functions/event.ts), which gates on a
|
|
5
|
+
* REAL git invocation instead of a raw-string match against the whole command — the
|
|
6
|
+
* false-fire root cause (wg-52e57e2ed252: `git commit` inside a grep pattern / echo arg /
|
|
7
|
+
* quoted subprocess prompt tripped the substring matcher).
|
|
8
|
+
*
|
|
9
|
+
* Threat model (load-bearing — pre-research §0): best-effort, honest-agent self-discipline,
|
|
10
|
+
* NOT adversary-proof. An agent controls its own shell and could evade any in-session check;
|
|
11
|
+
* the HARD boundary is the owned git pre-commit/pre-push hook reading the real staged diff.
|
|
12
|
+
* So this handles the command forms an honest agent actually types (quotes, compound
|
|
13
|
+
* `&&`/`||`/`|`/`;`, git globals `-C`/`-c`), not obfuscated evasion (command substitution,
|
|
14
|
+
* heredocs) — those are out of scope here and caught at the commit boundary.
|
|
15
|
+
*
|
|
16
|
+
* Contrast with `isReadOnlyBash` (src/runtime/session_state.ts:146): that splitter is
|
|
17
|
+
* quote-BLIND (`split(/\|\||&&|;|\|/)`), acceptable there because it is fail-closed and
|
|
18
|
+
* additive. A gate's mis-split is the bug, so this tokenizer is quote-aware.
|
|
19
|
+
*
|
|
20
|
+
* Imported by: src/functions/event.ts (the `command_invokes` primitive).
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Tokenize a shell command into segments (argv arrays), splitting on UNQUOTED control
|
|
24
|
+
* operators (`&& || | ; & newline`) and UNQUOTED whitespace, stripping quotes. Single
|
|
25
|
+
* quotes are literal; double quotes honor `\` escapes for `" \ $ ` (backtick); an unquoted
|
|
26
|
+
* `\` escapes the next char. Returns `[]` for non-string / empty / over-long input.
|
|
27
|
+
*/
|
|
28
|
+
export declare function tokenizeShell(command: string): string[][];
|
|
29
|
+
export interface InvokeQuery {
|
|
30
|
+
program: string;
|
|
31
|
+
subcommand?: string | undefined;
|
|
32
|
+
flagAny?: string[] | undefined;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* True iff some real shell segment invokes `program` (basename match) AND — if `subcommand`
|
|
36
|
+
* is given — its first positional (after skipping git global options and `-C`/`-c` values)
|
|
37
|
+
* equals it AND — if `flagAny` is given — at least one listed flag is present in that
|
|
38
|
+
* invocation's args.
|
|
39
|
+
*/
|
|
40
|
+
export declare function commandInvokes(command: string, q: InvokeQuery): boolean;
|
|
41
|
+
//# sourceMappingURL=shell_parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell_parse.d.ts","sourceRoot":"","sources":["../../src/functions/shell_parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAcH;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,CA8FzD;AA2BD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAGhB,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAcvE"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quote-aware shell tokenizer + git-invocation predicate. Pure, deterministic, total.
|
|
3
|
+
*
|
|
4
|
+
* Backs the `command_invokes` event primitive (src/functions/event.ts), which gates on a
|
|
5
|
+
* REAL git invocation instead of a raw-string match against the whole command — the
|
|
6
|
+
* false-fire root cause (wg-52e57e2ed252: `git commit` inside a grep pattern / echo arg /
|
|
7
|
+
* quoted subprocess prompt tripped the substring matcher).
|
|
8
|
+
*
|
|
9
|
+
* Threat model (load-bearing — pre-research §0): best-effort, honest-agent self-discipline,
|
|
10
|
+
* NOT adversary-proof. An agent controls its own shell and could evade any in-session check;
|
|
11
|
+
* the HARD boundary is the owned git pre-commit/pre-push hook reading the real staged diff.
|
|
12
|
+
* So this handles the command forms an honest agent actually types (quotes, compound
|
|
13
|
+
* `&&`/`||`/`|`/`;`, git globals `-C`/`-c`), not obfuscated evasion (command substitution,
|
|
14
|
+
* heredocs) — those are out of scope here and caught at the commit boundary.
|
|
15
|
+
*
|
|
16
|
+
* Contrast with `isReadOnlyBash` (src/runtime/session_state.ts:146): that splitter is
|
|
17
|
+
* quote-BLIND (`split(/\|\||&&|;|\|/)`), acceptable there because it is fail-closed and
|
|
18
|
+
* additive. A gate's mis-split is the bug, so this tokenizer is quote-aware.
|
|
19
|
+
*
|
|
20
|
+
* Imported by: src/functions/event.ts (the `command_invokes` primitive).
|
|
21
|
+
*/
|
|
22
|
+
// Bound input length (DoS / step-cap hygiene; matches the expression-fn ~10k convention,
|
|
23
|
+
// src/runtime/evaluator/expression/functions.ts:16).
|
|
24
|
+
const MAX_LEN = 10_000;
|
|
25
|
+
// git global options that consume a SEPARATE following token. Parity with the existing
|
|
26
|
+
// matchers' `(?:-[cC]\s+\S+\s+)*` sub-pattern (precedent: execute-gate/skill.yaml:27) and
|
|
27
|
+
// git(1)'s `git [<options>] <command>` grammar. The full version-dependent separate-value
|
|
28
|
+
// global set (--git-dir <p>, --work-tree <p>, …) is DELIBERATELY not enumerated: an
|
|
29
|
+
// un-handled one yields only a rare false-NEGATIVE (its value mis-read as the subcommand),
|
|
30
|
+
// backstopped by the owned git hook for the phase gates — see the module header + §4.2.
|
|
31
|
+
const GIT_VALUE_GLOBALS = new Set(['-C', '-c']);
|
|
32
|
+
/**
|
|
33
|
+
* Tokenize a shell command into segments (argv arrays), splitting on UNQUOTED control
|
|
34
|
+
* operators (`&& || | ; & newline`) and UNQUOTED whitespace, stripping quotes. Single
|
|
35
|
+
* quotes are literal; double quotes honor `\` escapes for `" \ $ ` (backtick); an unquoted
|
|
36
|
+
* `\` escapes the next char. Returns `[]` for non-string / empty / over-long input.
|
|
37
|
+
*/
|
|
38
|
+
export function tokenizeShell(command) {
|
|
39
|
+
if (typeof command !== 'string' || command.length === 0 || command.length > MAX_LEN) {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
const segments = [];
|
|
43
|
+
let argv = [];
|
|
44
|
+
let word = '';
|
|
45
|
+
let hasWord = false;
|
|
46
|
+
let i = 0;
|
|
47
|
+
let quote = null;
|
|
48
|
+
const n = command.length;
|
|
49
|
+
const endWord = () => {
|
|
50
|
+
if (hasWord) {
|
|
51
|
+
argv.push(word);
|
|
52
|
+
word = '';
|
|
53
|
+
hasWord = false;
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const endSeg = () => {
|
|
57
|
+
endWord();
|
|
58
|
+
if (argv.length > 0) {
|
|
59
|
+
segments.push(argv);
|
|
60
|
+
argv = [];
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
while (i < n) {
|
|
64
|
+
const ch = command[i];
|
|
65
|
+
if (quote === "'") {
|
|
66
|
+
if (ch === "'")
|
|
67
|
+
quote = null;
|
|
68
|
+
else {
|
|
69
|
+
word += ch;
|
|
70
|
+
hasWord = true;
|
|
71
|
+
}
|
|
72
|
+
i++;
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (quote === '"') {
|
|
76
|
+
if (ch === '"') {
|
|
77
|
+
quote = null;
|
|
78
|
+
i++;
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
if (ch === '\\' && i + 1 < n && '"\\$`'.includes(command[i + 1])) {
|
|
82
|
+
word += command[i + 1];
|
|
83
|
+
hasWord = true;
|
|
84
|
+
i += 2;
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
word += ch;
|
|
88
|
+
hasWord = true;
|
|
89
|
+
i++;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
// unquoted
|
|
93
|
+
if (ch === "'" || ch === '"') {
|
|
94
|
+
quote = ch;
|
|
95
|
+
hasWord = true; // an empty quoted string is still a (empty) word
|
|
96
|
+
i++;
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
if (ch === '\\' && i + 1 < n) {
|
|
100
|
+
word += command[i + 1];
|
|
101
|
+
hasWord = true;
|
|
102
|
+
i += 2;
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
if (ch === '&' && command[i + 1] === '&') {
|
|
106
|
+
endSeg();
|
|
107
|
+
i += 2;
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (ch === '|' && command[i + 1] === '|') {
|
|
111
|
+
endSeg();
|
|
112
|
+
i += 2;
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
if (ch === ';' || ch === '|' || ch === '&' || ch === '\n') {
|
|
116
|
+
endSeg();
|
|
117
|
+
i++;
|
|
118
|
+
continue;
|
|
119
|
+
}
|
|
120
|
+
if (ch === ' ' || ch === '\t' || ch === '\r') {
|
|
121
|
+
endWord();
|
|
122
|
+
i++;
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
word += ch;
|
|
126
|
+
hasWord = true;
|
|
127
|
+
i++;
|
|
128
|
+
}
|
|
129
|
+
endSeg();
|
|
130
|
+
return segments;
|
|
131
|
+
}
|
|
132
|
+
/** Basename of a program token (`/usr/bin/git` → `git`). */
|
|
133
|
+
function basename(p) {
|
|
134
|
+
const slash = p.lastIndexOf('/');
|
|
135
|
+
return slash === -1 ? p : p.slice(slash + 1);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Is `flag` present in an invocation's args? Long `--f` = exact or `--f=…`; short `-x` =
|
|
139
|
+
* exact or inside a pure short-flag cluster `-axb` (NOT a value-glued token). A literal
|
|
140
|
+
* (neither `--` nor a 2-char `-x`) matches only exactly.
|
|
141
|
+
*/
|
|
142
|
+
function flagPresent(args, flag) {
|
|
143
|
+
const isShort = flag.length === 2 && flag.startsWith('-') && /[A-Za-z]/.test(flag[1]);
|
|
144
|
+
for (const a of args) {
|
|
145
|
+
if (flag.startsWith('--')) {
|
|
146
|
+
if (a === flag || a.startsWith(flag + '='))
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
else if (isShort) {
|
|
150
|
+
if (a === flag || (/^-[A-Za-z]+$/.test(a) && a.includes(flag[1])))
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
else if (a === flag) {
|
|
154
|
+
return true;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
return false;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* True iff some real shell segment invokes `program` (basename match) AND — if `subcommand`
|
|
161
|
+
* is given — its first positional (after skipping git global options and `-C`/`-c` values)
|
|
162
|
+
* equals it AND — if `flagAny` is given — at least one listed flag is present in that
|
|
163
|
+
* invocation's args.
|
|
164
|
+
*/
|
|
165
|
+
export function commandInvokes(command, q) {
|
|
166
|
+
for (const argv of tokenizeShell(command)) {
|
|
167
|
+
if (argv.length === 0 || basename(argv[0]) !== q.program)
|
|
168
|
+
continue;
|
|
169
|
+
if (q.subcommand === undefined)
|
|
170
|
+
return true;
|
|
171
|
+
// Resolve the subcommand: skip leading global options (and -C/-c separate values).
|
|
172
|
+
let j = 1;
|
|
173
|
+
while (j < argv.length && argv[j].startsWith('-')) {
|
|
174
|
+
j += GIT_VALUE_GLOBALS.has(argv[j]) ? 2 : 1;
|
|
175
|
+
}
|
|
176
|
+
if (j >= argv.length || argv[j] !== q.subcommand)
|
|
177
|
+
continue;
|
|
178
|
+
if (q.flagAny === undefined)
|
|
179
|
+
return true;
|
|
180
|
+
if (q.flagAny.some((f) => flagPresent(argv.slice(j + 1), f)))
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
//# sourceMappingURL=shell_parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shell_parse.js","sourceRoot":"","sources":["../../src/functions/shell_parse.ts"],"names":[],"mappings":"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"}
|