wicked-crew 0.7.45 → 0.7.47
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/api/capture.d.ts +2 -2
- package/dist/api/delivery-index.d.ts +21 -0
- package/dist/api/delivery-index.d.ts.map +1 -1
- package/dist/api/delivery-index.js +36 -0
- package/dist/api/delivery-index.js.map +1 -1
- package/dist/api/elicitation-cache.d.ts +12 -0
- package/dist/api/elicitation-cache.d.ts.map +1 -1
- package/dist/api/elicitation-cache.js +17 -1
- package/dist/api/elicitation-cache.js.map +1 -1
- package/dist/api/eval-sample.d.ts +6 -6
- package/dist/api/governance-steering.d.ts.map +1 -1
- package/dist/api/governance-steering.js +1 -0
- package/dist/api/governance-steering.js.map +1 -1
- package/dist/api/mcp.d.ts +10 -10
- package/dist/api/policy-landing.d.ts +55 -0
- package/dist/api/policy-landing.d.ts.map +1 -0
- package/dist/api/policy-landing.js +174 -0
- package/dist/api/policy-landing.js.map +1 -0
- package/dist/api/recording.d.ts +228 -0
- package/dist/api/recording.d.ts.map +1 -0
- package/dist/api/recording.js +1140 -0
- package/dist/api/recording.js.map +1 -0
- package/dist/api/roster-standing.d.ts.map +1 -1
- package/dist/api/roster-standing.js +5 -1
- package/dist/api/roster-standing.js.map +1 -1
- package/dist/api/routes.d.ts +31 -39
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +264 -104
- package/dist/api/routes.js.map +1 -1
- package/dist/api/run-timing-index.d.ts +17 -0
- package/dist/api/run-timing-index.d.ts.map +1 -1
- package/dist/api/run-timing-index.js +43 -1
- package/dist/api/run-timing-index.js.map +1 -1
- package/dist/api/seat-health.d.ts +35 -0
- package/dist/api/seat-health.d.ts.map +1 -1
- package/dist/api/seat-health.js +72 -0
- package/dist/api/seat-health.js.map +1 -1
- package/dist/api/seat-standing.d.ts +2 -2
- package/dist/api/seat-standing.d.ts.map +1 -1
- package/dist/api/seat-standing.js +27 -7
- package/dist/api/seat-standing.js.map +1 -1
- package/dist/api/server.d.ts +12 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +74 -1
- package/dist/api/server.js.map +1 -1
- package/dist/api/testing.d.ts +4 -4
- package/dist/api/testing.d.ts.map +1 -1
- package/dist/api/testing.js +3 -0
- package/dist/api/testing.js.map +1 -1
- package/dist/api/watch-routes.d.ts +30 -0
- package/dist/api/watch-routes.d.ts.map +1 -0
- package/dist/api/watch-routes.js +104 -0
- package/dist/api/watch-routes.js.map +1 -0
- package/dist/campaigns/routes.d.ts +2 -2
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +4 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/core/adapter.d.ts +36 -0
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +177 -5
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/run-identity.js +1 -1
- package/dist/core/run-identity.js.map +1 -1
- package/dist/core/walkthrough-root.d.ts +21 -0
- package/dist/core/walkthrough-root.d.ts.map +1 -0
- package/dist/core/walkthrough-root.js +66 -0
- package/dist/core/walkthrough-root.js.map +1 -0
- package/dist/decisions/derive.d.ts +79 -0
- package/dist/decisions/derive.d.ts.map +1 -0
- package/dist/decisions/derive.js +282 -0
- package/dist/decisions/derive.js.map +1 -0
- package/dist/decisions/events.d.ts +23 -0
- package/dist/decisions/events.d.ts.map +1 -0
- package/dist/decisions/events.js +22 -0
- package/dist/decisions/events.js.map +1 -0
- package/dist/decisions/ingest.d.ts +28 -0
- package/dist/decisions/ingest.d.ts.map +1 -0
- package/dist/decisions/ingest.js +92 -0
- package/dist/decisions/ingest.js.map +1 -0
- package/dist/decisions/land.d.ts +100 -0
- package/dist/decisions/land.d.ts.map +1 -0
- package/dist/decisions/land.js +466 -0
- package/dist/decisions/land.js.map +1 -0
- package/dist/decisions/ledger.d.ts +60 -0
- package/dist/decisions/ledger.d.ts.map +1 -0
- package/dist/decisions/ledger.js +246 -0
- package/dist/decisions/ledger.js.map +1 -0
- package/dist/decisions/routes.d.ts +10 -0
- package/dist/decisions/routes.d.ts.map +1 -0
- package/dist/decisions/routes.js +141 -0
- package/dist/decisions/routes.js.map +1 -0
- package/dist/decisions/types.d.ts +120 -0
- package/dist/decisions/types.d.ts.map +1 -0
- package/dist/decisions/types.js +19 -0
- package/dist/decisions/types.js.map +1 -0
- package/dist/interactive/draft-events.d.ts.map +1 -1
- package/dist/interactive/draft-events.js +1 -0
- package/dist/interactive/draft-events.js.map +1 -1
- package/dist/projects/events.d.ts.map +1 -1
- package/dist/projects/events.js +2 -1
- package/dist/projects/events.js.map +1 -1
- package/dist/projects/state-home-preflight.d.ts.map +1 -1
- package/dist/projects/state-home-preflight.js +3 -0
- package/dist/projects/state-home-preflight.js.map +1 -1
- package/dist/projects/state-home-registry.d.ts.map +1 -1
- package/dist/projects/state-home-registry.js +2 -0
- package/dist/projects/state-home-registry.js.map +1 -1
- package/dist/projects/state-home.d.ts +6 -0
- package/dist/projects/state-home.d.ts.map +1 -1
- package/dist/projects/state-home.js +28 -1
- package/dist/projects/state-home.js.map +1 -1
- package/dist/qe/acceptance.d.ts +45 -4
- package/dist/qe/acceptance.d.ts.map +1 -1
- package/dist/qe/acceptance.js +93 -4
- package/dist/qe/acceptance.js.map +1 -1
- package/dist/qe/ledger.d.ts +20 -0
- package/dist/qe/ledger.d.ts.map +1 -1
- package/dist/qe/ledger.js +34 -0
- package/dist/qe/ledger.js.map +1 -1
- package/dist/qe/walkthrough-acceptance.d.ts +82 -0
- package/dist/qe/walkthrough-acceptance.d.ts.map +1 -0
- package/dist/qe/walkthrough-acceptance.js +248 -0
- package/dist/qe/walkthrough-acceptance.js.map +1 -0
- package/dist/skills/base-skill.d.ts.map +1 -1
- package/dist/skills/base-skill.js +3 -2
- package/dist/skills/base-skill.js.map +1 -1
- package/dist/skills/plugin-source.d.ts +19 -1
- package/dist/skills/plugin-source.d.ts.map +1 -1
- package/dist/skills/plugin-source.js +31 -2
- package/dist/skills/plugin-source.js.map +1 -1
- package/dist/skills/runtime.d.ts +11 -2
- package/dist/skills/runtime.d.ts.map +1 -1
- package/dist/skills/runtime.js +29 -1
- package/dist/skills/runtime.js.map +1 -1
- package/dist/skills/store.d.ts +14 -1
- package/dist/skills/store.d.ts.map +1 -1
- package/dist/skills/store.js +19 -5
- package/dist/skills/store.js.map +1 -1
- package/dist/standing-orders/routes.d.ts +4 -4
- package/dist/standing-orders/store.d.ts +2 -2
- package/dist/watch/checks/check-failed.d.ts +24 -0
- package/dist/watch/checks/check-failed.d.ts.map +1 -0
- package/dist/watch/checks/check-failed.js +56 -0
- package/dist/watch/checks/check-failed.js.map +1 -0
- package/dist/watch/checks/deliver-audit.d.ts +19 -0
- package/dist/watch/checks/deliver-audit.d.ts.map +1 -0
- package/dist/watch/checks/deliver-audit.js +129 -0
- package/dist/watch/checks/deliver-audit.js.map +1 -0
- package/dist/watch/checks/index.d.ts +8 -0
- package/dist/watch/checks/index.d.ts.map +1 -0
- package/dist/watch/checks/index.js +19 -0
- package/dist/watch/checks/index.js.map +1 -0
- package/dist/watch/checks/lag.d.ts +24 -0
- package/dist/watch/checks/lag.d.ts.map +1 -0
- package/dist/watch/checks/lag.js +55 -0
- package/dist/watch/checks/lag.js.map +1 -0
- package/dist/watch/checks/quiet-after-claim.d.ts +17 -0
- package/dist/watch/checks/quiet-after-claim.d.ts.map +1 -0
- package/dist/watch/checks/quiet-after-claim.js +89 -0
- package/dist/watch/checks/quiet-after-claim.js.map +1 -0
- package/dist/watch/checks/ungated.d.ts +12 -0
- package/dist/watch/checks/ungated.d.ts.map +1 -0
- package/dist/watch/checks/ungated.js +64 -0
- package/dist/watch/checks/ungated.js.map +1 -0
- package/dist/watch/emit.d.ts +122 -0
- package/dist/watch/emit.d.ts.map +1 -0
- package/dist/watch/emit.js +443 -0
- package/dist/watch/emit.js.map +1 -0
- package/dist/watch/events.d.ts +21 -0
- package/dist/watch/events.d.ts.map +1 -0
- package/dist/watch/events.js +21 -0
- package/dist/watch/events.js.map +1 -0
- package/dist/watch/keys.d.ts +15 -0
- package/dist/watch/keys.d.ts.map +1 -0
- package/dist/watch/keys.js +23 -0
- package/dist/watch/keys.js.map +1 -0
- package/dist/watch/lanes.d.ts +41 -0
- package/dist/watch/lanes.d.ts.map +1 -0
- package/dist/watch/lanes.js +73 -0
- package/dist/watch/lanes.js.map +1 -0
- package/dist/watch/loader.d.ts +47 -0
- package/dist/watch/loader.d.ts.map +1 -0
- package/dist/watch/loader.js +178 -0
- package/dist/watch/loader.js.map +1 -0
- package/dist/watch/registry.d.ts +137 -0
- package/dist/watch/registry.d.ts.map +1 -0
- package/dist/watch/registry.js +530 -0
- package/dist/watch/registry.js.map +1 -0
- package/dist/watch/ring.d.ts +32 -0
- package/dist/watch/ring.d.ts.map +1 -0
- package/dist/watch/ring.js +90 -0
- package/dist/watch/ring.js.map +1 -0
- package/dist/watch/router.d.ts +25 -0
- package/dist/watch/router.d.ts.map +1 -0
- package/dist/watch/router.js +87 -0
- package/dist/watch/router.js.map +1 -0
- package/dist/watch/sources.d.ts +42 -0
- package/dist/watch/sources.d.ts.map +1 -0
- package/dist/watch/sources.js +104 -0
- package/dist/watch/sources.js.map +1 -0
- package/dist/watch/types.d.ts +110 -0
- package/dist/watch/types.d.ts.map +1 -0
- package/dist/watch/types.js +6 -0
- package/dist/watch/types.js.map +1 -0
- package/endpoint-manifest.json +178 -1
- package/package.json +3 -2
- package/watch/entries/deliver-audit.json +17 -0
- package/watch/entries/quiet-after-claim.json +16 -0
- package/watch/entries/registry-check-failed.json +12 -0
- package/watch/entries/registry-lagging.json +12 -0
- package/watch/entries/ungated.json +13 -0
- package/dist/api/demo.d.ts +0 -90
- package/dist/api/demo.d.ts.map +0 -1
- package/dist/api/demo.js +0 -492
- package/dist/api/demo.js.map +0 -1
|
@@ -38,7 +38,7 @@ export const SYSTEM_WORKFLOWS = new Set([
|
|
|
38
38
|
'onboarding',
|
|
39
39
|
'capture-learnings',
|
|
40
40
|
'steering-author',
|
|
41
|
-
// The Demo experience's preset (api/
|
|
41
|
+
// The Demo experience's preset (api/recording.ts, studio#373): launched from Demo mode with its demo
|
|
42
42
|
// root, never from a general preset picker; it delivers nothing.
|
|
43
43
|
'demo',
|
|
44
44
|
// The interactive document seams (`interactive/*-events.ts`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-identity.js","sourceRoot":"","sources":["../../src/core/run-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAwB,IAAI,GAAG,CAAC;IAC3D,MAAM;IACN,YAAY;IACZ,mBAAmB;IACnB,iBAAiB;IACjB,
|
|
1
|
+
{"version":3,"file":"run-identity.js","sourceRoot":"","sources":["../../src/core/run-identity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { SessionView, WorkUnit } from './types.js';
|
|
2
|
+
/** The subdirectory of an evidence root the walkthrough author writes under. */
|
|
3
|
+
export declare const WALKTHROUGH_AUTHOR_SUBDIR = "author";
|
|
4
|
+
/**
|
|
5
|
+
* A run id usable as ONE path segment (`[A-Za-z0-9._-]`, not starting with `.`, ≤ 128 chars) — the
|
|
6
|
+
* engine's step-id rule. `POST /runs` takes a caller-chosen `sessionId`, so anything else (`../x`)
|
|
7
|
+
* gets no evidence root rather than a directory outside `WICKED_WALKTHROUGH_DIR` (codex on #758).
|
|
8
|
+
*/
|
|
9
|
+
export declare function isPlainRunId(runId: string): boolean;
|
|
10
|
+
/** The run's evidence root. Throws for a run id that is not one plain path segment ({@link isPlainRunId}). */
|
|
11
|
+
export declare function walkthroughRootDir(runId: string): string;
|
|
12
|
+
/** The step id of a unit (`<run>:<step>` → `<step>`). */
|
|
13
|
+
export declare function stepIdOf(view: SessionView, unit: WorkUnit): string;
|
|
14
|
+
/**
|
|
15
|
+
* The PROOF ROOT of a `walkthrough_review` step — `<session.evidence_root>/<step>` — only when it is a
|
|
16
|
+
* plain directory directly under the evidence root (never through a planted link: the engine's
|
|
17
|
+
* `check_proof_root` rule), and its step id is one plain path segment other than `author`. `null`
|
|
18
|
+
* otherwise, and for a run with no evidence root.
|
|
19
|
+
*/
|
|
20
|
+
export declare function walkthroughProofRoot(view: SessionView, review: WorkUnit): Promise<string | null>;
|
|
21
|
+
//# sourceMappingURL=walkthrough-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-root.d.ts","sourceRoot":"","sources":["../../src/core/walkthrough-root.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAExD,gFAAgF;AAChF,eAAO,MAAM,yBAAyB,WAAW,CAAC;AAElD;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,8GAA8G;AAC9G,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,yDAAyD;AACzD,wBAAgB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAGlE;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAetG"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WT-W1 (DES-walkthrough-proof §4.2, O7): where a run's EVIDENCE ROOT lives. Crew mints one per
|
|
3
|
+
* repo-bound run at launch (`CoreAdapter.launchRun`) and hands it to the engine as
|
|
4
|
+
* `LaunchOptions.evidenceRoot`; the engine persists it as `session.evidence_root`.
|
|
5
|
+
*
|
|
6
|
+
* <root>/author/<plan step>/ the walkthrough author's write dir — `<root>/author` is the ONLY
|
|
7
|
+
* path crew lists in the launch's `extraWriteRoots`
|
|
8
|
+
* <root>/<review step>/ the PROOF ROOT, written only by the jailed `walkthrough_review` Tool
|
|
9
|
+
*
|
|
10
|
+
* One directory per run, outside every sandbox and state home (the demo-root pattern):
|
|
11
|
+
* `$WICKED_WALKTHROUGH_DIR/<runId>`, default `<home>/.wicked/walkthroughs/<runId>`.
|
|
12
|
+
*/
|
|
13
|
+
import { promises as fsp } from 'node:fs';
|
|
14
|
+
import { join } from 'node:path';
|
|
15
|
+
/** The subdirectory of an evidence root the walkthrough author writes under. */
|
|
16
|
+
export const WALKTHROUGH_AUTHOR_SUBDIR = 'author';
|
|
17
|
+
/**
|
|
18
|
+
* A run id usable as ONE path segment (`[A-Za-z0-9._-]`, not starting with `.`, ≤ 128 chars) — the
|
|
19
|
+
* engine's step-id rule. `POST /runs` takes a caller-chosen `sessionId`, so anything else (`../x`)
|
|
20
|
+
* gets no evidence root rather than a directory outside `WICKED_WALKTHROUGH_DIR` (codex on #758).
|
|
21
|
+
*/
|
|
22
|
+
export function isPlainRunId(runId) {
|
|
23
|
+
return runId.length > 0 && runId.length <= 128 && !runId.startsWith('.') && /^[A-Za-z0-9._-]+$/.test(runId);
|
|
24
|
+
}
|
|
25
|
+
/** The run's evidence root. Throws for a run id that is not one plain path segment ({@link isPlainRunId}). */
|
|
26
|
+
export function walkthroughRootDir(runId) {
|
|
27
|
+
if (!isPlainRunId(runId))
|
|
28
|
+
throw new Error(`run id ${JSON.stringify(runId)} is not a plain path segment, so it has no evidence root`);
|
|
29
|
+
if (process.env.WICKED_WALKTHROUGH_DIR)
|
|
30
|
+
return join(process.env.WICKED_WALKTHROUGH_DIR, runId);
|
|
31
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? '/tmp';
|
|
32
|
+
return join(home, '.wicked', 'walkthroughs', runId);
|
|
33
|
+
}
|
|
34
|
+
/** The step id of a unit (`<run>:<step>` → `<step>`). */
|
|
35
|
+
export function stepIdOf(view, unit) {
|
|
36
|
+
const prefix = `${view.session.id}:`;
|
|
37
|
+
return unit.id.startsWith(prefix) ? unit.id.slice(prefix.length) : unit.id;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The PROOF ROOT of a `walkthrough_review` step — `<session.evidence_root>/<step>` — only when it is a
|
|
41
|
+
* plain directory directly under the evidence root (never through a planted link: the engine's
|
|
42
|
+
* `check_proof_root` rule), and its step id is one plain path segment other than `author`. `null`
|
|
43
|
+
* otherwise, and for a run with no evidence root.
|
|
44
|
+
*/
|
|
45
|
+
export async function walkthroughProofRoot(view, review) {
|
|
46
|
+
const evidence = view.session.evidence_root;
|
|
47
|
+
if (typeof evidence !== 'string' || evidence === '')
|
|
48
|
+
return null;
|
|
49
|
+
const step = stepIdOf(view, review);
|
|
50
|
+
if (!/^[A-Za-z0-9._-]+$/.test(step) || step.startsWith('.') || step.toLowerCase() === WALKTHROUGH_AUTHOR_SUBDIR)
|
|
51
|
+
return null;
|
|
52
|
+
const dir = join(evidence, step);
|
|
53
|
+
try {
|
|
54
|
+
const st = await fsp.lstat(dir);
|
|
55
|
+
if (st.isSymbolicLink() || !st.isDirectory())
|
|
56
|
+
return null;
|
|
57
|
+
const real = await fsp.realpath(dir);
|
|
58
|
+
if (real !== join(await fsp.realpath(evidence), step))
|
|
59
|
+
return null;
|
|
60
|
+
return real;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=walkthrough-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walkthrough-root.js","sourceRoot":"","sources":["../../src/core/walkthrough-root.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,gFAAgF;AAChF,MAAM,CAAC,MAAM,yBAAyB,GAAG,QAAQ,CAAC;AAElD;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9G,CAAC;AAED,8GAA8G;AAC9G,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,UAAU,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;IACrI,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB;QAAE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;IAC/F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC;IACnE,OAAO,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AACtD,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,IAAiB,EAAE,IAAc;IACxD,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC;IACrC,OAAO,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC7E,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,IAAiB,EAAE,MAAgB;IAC5E,MAAM,QAAQ,GAAI,IAAI,CAAC,OAAuC,CAAC,aAAa,CAAC;IAC7E,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,yBAAyB;QAAE,OAAO,IAAI,CAAC;IAC7H,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnE,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic derivation (DES-decision-capture §4.4) — PURE: no I/O, no model, golden-tested.
|
|
3
|
+
*
|
|
4
|
+
* Words → exclusions → template → D·G·C·R → key → route. Auto is decided here and ONLY here, from
|
|
5
|
+
* facts the model cannot set: a human actor, `auth=required`, typed words, a T1/T2 template that
|
|
6
|
+
* passes D and G, a known project, no redaction, not an approval of a proposal, not a restatement
|
|
7
|
+
* or a conflict. Model labels can add an offer, or turn an auto into a question (`same_as` →
|
|
8
|
+
* `maybe-restated`); they can never promote and never swallow a rule silently (review N6).
|
|
9
|
+
*
|
|
10
|
+
* The rev-1 template table is not carried in the rev-2 spec text; the six templates below are its
|
|
11
|
+
* reconstruction from §3/§4.4/§8 (T1 always and T2 never auto-eligible; T3 "X before Y" is the
|
|
12
|
+
* spec's own offer example), recorded in the PR as an assumption.
|
|
13
|
+
*/
|
|
14
|
+
import type { DecisionModelLabels, DecisionRoute, DecisionTemplateId } from './types.js';
|
|
15
|
+
import type { SteeringType } from 'wicked-crew-api-types';
|
|
16
|
+
/** One in-force rule the derivation compares against (from `considerRules`). */
|
|
17
|
+
export interface InForceRule {
|
|
18
|
+
id: string;
|
|
19
|
+
statement: string;
|
|
20
|
+
project?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface DeriveInput {
|
|
23
|
+
words: string;
|
|
24
|
+
actorKind: 'human' | 'agent' | 'system';
|
|
25
|
+
authMode: 'off' | 'required';
|
|
26
|
+
wordsSource: 'typed' | 'operator-files' | 'cli-transcript';
|
|
27
|
+
projectId: string | null;
|
|
28
|
+
inForce: ReadonlyArray<InForceRule>;
|
|
29
|
+
/** Prior records with the same key (the ledger index); absent = none. */
|
|
30
|
+
recurrence?: (key: string) => {
|
|
31
|
+
count: number;
|
|
32
|
+
first_at: number;
|
|
33
|
+
projects: string[];
|
|
34
|
+
} | null;
|
|
35
|
+
labels?: DecisionModelLabels;
|
|
36
|
+
now?: number;
|
|
37
|
+
}
|
|
38
|
+
export interface Derivation {
|
|
39
|
+
words: string;
|
|
40
|
+
redacted: boolean;
|
|
41
|
+
template: DecisionTemplateId | null;
|
|
42
|
+
exclusions: string[];
|
|
43
|
+
dgc: {
|
|
44
|
+
durable: boolean;
|
|
45
|
+
general: boolean;
|
|
46
|
+
checkable: boolean;
|
|
47
|
+
};
|
|
48
|
+
recurrence: {
|
|
49
|
+
count: number;
|
|
50
|
+
first_at: number;
|
|
51
|
+
projects: string[];
|
|
52
|
+
};
|
|
53
|
+
statement: string | null;
|
|
54
|
+
polarity: 'do' | 'dont' | null;
|
|
55
|
+
key: string | null;
|
|
56
|
+
scope: 'project' | 'everywhere';
|
|
57
|
+
steering_type: SteeringType;
|
|
58
|
+
route: DecisionRoute;
|
|
59
|
+
/** The in-force rule a restated / maybe-restated decision names, or a conflict contradicts. */
|
|
60
|
+
rule_ref?: string;
|
|
61
|
+
}
|
|
62
|
+
/** Mask secrets and email addresses. Returns the stored copy and whether anything was masked. */
|
|
63
|
+
export declare function scrubWords(words: string): {
|
|
64
|
+
words: string;
|
|
65
|
+
redacted: boolean;
|
|
66
|
+
};
|
|
67
|
+
/** The content words of a text: lowercase tokens that are not stopwords, ids, paths or versions. */
|
|
68
|
+
export declare function contentWords(text: string): string[];
|
|
69
|
+
export declare function exclusionsOf(words: string, hasOpener: boolean, contentCount: number): string[];
|
|
70
|
+
export declare function steeringTypeOf(text: string): SteeringType;
|
|
71
|
+
export declare function keyOf(template: DecisionTemplateId, polarity: 'do' | 'dont', body: string): string;
|
|
72
|
+
/** The key a stored rule's statement derives to, so a restatement is an exact key match. */
|
|
73
|
+
export declare function ruleKey(statement: string): {
|
|
74
|
+
key: string;
|
|
75
|
+
polarity: 'do' | 'dont';
|
|
76
|
+
subject: string;
|
|
77
|
+
} | null;
|
|
78
|
+
export declare function deriveDecision(input: DeriveInput): Derivation;
|
|
79
|
+
//# sourceMappingURL=derive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.d.ts","sourceRoot":"","sources":["../../src/decisions/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deterministic derivation (DES-decision-capture §4.4) — PURE: no I/O, no model, golden-tested.
|
|
3
|
+
*
|
|
4
|
+
* Words → exclusions → template → D·G·C·R → key → route. Auto is decided here and ONLY here, from
|
|
5
|
+
* facts the model cannot set: a human actor, `auth=required`, typed words, a T1/T2 template that
|
|
6
|
+
* passes D and G, a known project, no redaction, not an approval of a proposal, not a restatement
|
|
7
|
+
* or a conflict. Model labels can add an offer, or turn an auto into a question (`same_as` →
|
|
8
|
+
* `maybe-restated`); they can never promote and never swallow a rule silently (review N6).
|
|
9
|
+
*
|
|
10
|
+
* The rev-1 template table is not carried in the rev-2 spec text; the six templates below are its
|
|
11
|
+
* reconstruction from §3/§4.4/§8 (T1 always and T2 never auto-eligible; T3 "X before Y" is the
|
|
12
|
+
* spec's own offer example), recorded in the PR as an assumption.
|
|
13
|
+
*/
|
|
14
|
+
// ── Privacy (§4.9): a hit masks the stored copy, sets `redacted`, and blocks auto ──────────────────
|
|
15
|
+
const SECRET_PATTERNS = [
|
|
16
|
+
/\bgh[pousr]_[A-Za-z0-9]{20,}\b/g,
|
|
17
|
+
/\bgithub_pat_[A-Za-z0-9_]{20,}\b/g,
|
|
18
|
+
/\bsk-[A-Za-z0-9_-]{16,}\b/g,
|
|
19
|
+
/\bAKIA[0-9A-Z]{16}\b/g,
|
|
20
|
+
/\bxox[abpr]-[A-Za-z0-9-]{10,}\b/g,
|
|
21
|
+
/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/g,
|
|
22
|
+
/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,
|
|
23
|
+
/\b(?:password|passwd|secret|token|api[_-]?key)\s*[:=]\s*\S+/gi,
|
|
24
|
+
/[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+/g,
|
|
25
|
+
];
|
|
26
|
+
/** Mask secrets and email addresses. Returns the stored copy and whether anything was masked. */
|
|
27
|
+
export function scrubWords(words) {
|
|
28
|
+
let out = words;
|
|
29
|
+
let redacted = false;
|
|
30
|
+
for (const re of SECRET_PATTERNS) {
|
|
31
|
+
out = out.replace(re, () => {
|
|
32
|
+
redacted = true;
|
|
33
|
+
return '[redacted]';
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return { words: out, redacted };
|
|
37
|
+
}
|
|
38
|
+
// ── Normalisation and content words ─────────────────────────────────────────────────────────────
|
|
39
|
+
const STANDING_OPENER = /^(?:from now on|going forward|from here on(?: out)?|in (?:the )?future|as a rule|by default|in general|moving forward)\b[,:;]?\s*/i;
|
|
40
|
+
const POLITE_LEAD = /^(?:please|ok(?:ay)?|so|and|also|but|hey)\b[,:;]?\s*/i;
|
|
41
|
+
const STOPWORDS = new Set([
|
|
42
|
+
'a', 'an', 'the', 'to', 'of', 'in', 'on', 'for', 'and', 'or', 'but', 'with', 'at', 'by', 'from', 'into', 'onto',
|
|
43
|
+
'it', 'its', "it's", 'this', 'that', 'these', 'those', 'is', 'are', 'be', 'been', 'being', 'was', 'were', 'am',
|
|
44
|
+
'we', 'you', 'i', 'our', 'your', 'my', 'me', 'us', 'they', 'them', 'their', 'he', 'she', 'his', 'her',
|
|
45
|
+
'please', 'always', 'never', 'now', 'going', 'forward', 'future', 'every', 'time', 'any', 'all', 'each',
|
|
46
|
+
'do', 'does', 'did', "don't", 'dont', 'not', 'no', 'should', 'must', 'has', 'have', 'had', 'need', 'needs',
|
|
47
|
+
'before', 'after', 'only', 'prefer', 'instead', 'rather', 'than', 'over', 'just', 'also', 'then', 'so', 'as',
|
|
48
|
+
'if', 'when', 'whenever', 'unless', 'ever', 'again', 'here', 'there', 'out', 'up', 'can', 'could', 'would',
|
|
49
|
+
'will', "let's", 'lets', 'let', 'ok', 'okay', 'yes', 'yeah', 'stop', 'make', 'sure', 'one', 'thing', 'things',
|
|
50
|
+
'via', 'per', 'own', 'more', 'less', 'very', 'really', 'still', 'some', 'what', 'which', 'who', 'how',
|
|
51
|
+
]);
|
|
52
|
+
/** Strip ids, URLs, SHAs, paths and versions before counting content words (G). */
|
|
53
|
+
function stripTokens(text) {
|
|
54
|
+
return text
|
|
55
|
+
.replace(/https?:\/\/\S+/gi, ' ')
|
|
56
|
+
.replace(/\b[0-9a-f]{7,40}\b/gi, ' ')
|
|
57
|
+
.replace(/\bv?\d+(?:\.\d+){1,3}\b/g, ' ')
|
|
58
|
+
.replace(/(?:^|\s)(?:\.{0,2}\/)?[\w.-]+(?:\/[\w.-]+)+/g, ' ')
|
|
59
|
+
.replace(/\b[\w-]*\d[\w-]*\b/g, ' ')
|
|
60
|
+
.replace(/#\d+/g, ' ');
|
|
61
|
+
}
|
|
62
|
+
/** The content words of a text: lowercase tokens that are not stopwords, ids, paths or versions. */
|
|
63
|
+
export function contentWords(text) {
|
|
64
|
+
const tokens = stripTokens(text.toLowerCase()).match(/[a-z][a-z'-]*/g) ?? [];
|
|
65
|
+
const out = [];
|
|
66
|
+
for (const raw of tokens) {
|
|
67
|
+
const t = raw.replace(/^'+|'+$/g, '').replace(/'s$/, '');
|
|
68
|
+
if (t.length < 2 || STOPWORDS.has(t))
|
|
69
|
+
continue;
|
|
70
|
+
out.push(t);
|
|
71
|
+
}
|
|
72
|
+
return out;
|
|
73
|
+
}
|
|
74
|
+
function sentence(text) {
|
|
75
|
+
const t = text.trim().replace(/[\s.!;,]+$/u, '');
|
|
76
|
+
if (t === '')
|
|
77
|
+
return t;
|
|
78
|
+
return `${t.charAt(0).toUpperCase()}${t.slice(1)}.`;
|
|
79
|
+
}
|
|
80
|
+
// ── Exclusions (§4.4 step 1) ────────────────────────────────────────────────────────────────────
|
|
81
|
+
const QUESTION_LEAD = /^(?:(?:does|do|did|don't|doesn't|didn't|is|are|was|were|isn't|aren't|can|could|should|would|will|shouldn't|have|has)\s+(?:we|you|i|they|it|this|that|these|those|the|there|he|she|anyone|someone)\b|(?:why|what|how|when|where|who|which)\b)/i;
|
|
82
|
+
const ONE_OFF = /\b(?:never ?mind|skip (?:that|this|it)|for now|this time|this once|just once|today|tonight|in this (?:session|chat|run)|for this one|for this (?:run|pr|change|task)|right now)\b/i;
|
|
83
|
+
export function exclusionsOf(words, hasOpener, contentCount) {
|
|
84
|
+
const out = [];
|
|
85
|
+
const trimmed = words.trim();
|
|
86
|
+
if (trimmed.endsWith('?') || QUESTION_LEAD.test(trimmed))
|
|
87
|
+
out.push('question');
|
|
88
|
+
if (ONE_OFF.test(trimmed))
|
|
89
|
+
out.push('one-off');
|
|
90
|
+
if (hasOpener && contentCount < 3)
|
|
91
|
+
out.push('short-opener');
|
|
92
|
+
return out;
|
|
93
|
+
}
|
|
94
|
+
const SUBJECT = /^(?:we|you|i|they|the team|everyone|agents?|seats?|workers?)\s+/i;
|
|
95
|
+
function matchTemplate(body, hasOpener) {
|
|
96
|
+
const b = body.replace(SUBJECT, '');
|
|
97
|
+
let m;
|
|
98
|
+
// T1 — always X / X every time.
|
|
99
|
+
if ((m = /^(?:should\s+|must\s+)?(?:always|every\s+time,?)\s+(.+)$/i.exec(b)) !== null) {
|
|
100
|
+
const rest = (m[1] ?? '').trim();
|
|
101
|
+
return { template: 'T1-always', polarity: 'do', statement: sentence(`Always ${rest}`), body: rest };
|
|
102
|
+
}
|
|
103
|
+
if ((m = /^(.+?),?\s+(?:always|every\s+(?:single\s+)?time)$/i.exec(b.replace(/[.!]+$/, ''))) !== null) {
|
|
104
|
+
const rest = (m[1] ?? '').trim();
|
|
105
|
+
return { template: 'T1-always', polarity: 'do', statement: sentence(`Always ${rest}`), body: rest };
|
|
106
|
+
}
|
|
107
|
+
// T2 — never X / don't ever X / (with a standing opener) don't X.
|
|
108
|
+
if ((m = /^(?:should\s+|must\s+)?(?:never|do\s+not\s+ever|don'?t\s+ever)\s+(.+)$/i.exec(b)) !== null) {
|
|
109
|
+
const rest = (m[1] ?? '').trim();
|
|
110
|
+
return { template: 'T2-never', polarity: 'dont', statement: sentence(`Never ${rest}`), body: rest };
|
|
111
|
+
}
|
|
112
|
+
if (hasOpener && (m = /^(?:do\s+not|don'?t)\s+(.+)$/i.exec(b)) !== null) {
|
|
113
|
+
const rest = (m[1] ?? '').trim();
|
|
114
|
+
return { template: 'T2-never', polarity: 'dont', statement: sentence(`Never ${rest}`), body: rest };
|
|
115
|
+
}
|
|
116
|
+
if (hasOpener && (m = /^stop\s+(.+)$/i.exec(b)) !== null) {
|
|
117
|
+
const rest = (m[1] ?? '').trim();
|
|
118
|
+
return { template: 'T2-never', polarity: 'dont', statement: sentence(`Stop ${rest}`), body: rest };
|
|
119
|
+
}
|
|
120
|
+
// T6 — only X.
|
|
121
|
+
if ((m = /^only\s+(.+)$/i.exec(b)) !== null) {
|
|
122
|
+
const rest = (m[1] ?? '').trim();
|
|
123
|
+
return { template: 'T6-only', polarity: 'do', statement: sentence(`Only ${rest}`), body: rest };
|
|
124
|
+
}
|
|
125
|
+
// T4 — prefer X (over Y) / use X instead of Y.
|
|
126
|
+
if ((m = /^(?:prefer|favou?r)\s+(.+)$/i.exec(b)) !== null) {
|
|
127
|
+
const rest = (m[1] ?? '').trim();
|
|
128
|
+
return { template: 'T4-prefer', polarity: 'do', statement: sentence(`Prefer ${rest}`), body: rest };
|
|
129
|
+
}
|
|
130
|
+
if ((m = /^(?:use|pick|choose)\s+(.+?)\s+(?:instead of|rather than|over)\s+(.+)$/i.exec(b)) !== null) {
|
|
131
|
+
const rest = `${(m[1] ?? '').trim()} over ${(m[2] ?? '').trim()}`;
|
|
132
|
+
return { template: 'T4-prefer', polarity: 'do', statement: sentence(`Prefer ${rest}`), body: rest };
|
|
133
|
+
}
|
|
134
|
+
// T3 — X before Y (an order).
|
|
135
|
+
if ((m = /^(.+?)\s+before\s+(.+)$/i.exec(b)) !== null && contentWords(m[1] ?? '').length > 0) {
|
|
136
|
+
return { template: 'T3-before', polarity: 'do', statement: sentence(b), body: b };
|
|
137
|
+
}
|
|
138
|
+
// T5 — X must / should / has to Y; do not X (no opener).
|
|
139
|
+
if ((m = /^(?:do\s+not|don'?t)\s+(.+)$/i.exec(b)) !== null) {
|
|
140
|
+
const rest = (m[1] ?? '').trim();
|
|
141
|
+
return { template: 'T5-must', polarity: 'dont', statement: sentence(`Do not ${rest}`), body: rest };
|
|
142
|
+
}
|
|
143
|
+
if (/\b(?:must|should|has to|have to|needs to|need to|ought to|mustn't|shouldn't)\b/i.test(b) && !/\b(?:must|should)\s+(?:we|i|you)\b/i.test(b)) {
|
|
144
|
+
const dont = /\b(?:must not|mustn't|should not|shouldn't)\b/i.test(b);
|
|
145
|
+
return { template: 'T5-must', polarity: dont ? 'dont' : 'do', statement: sentence(b), body: b };
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
const CHECKABLE_VERB = /\b(?:run|check|test|use|add|write|fix|review|ask|merge|push|deploy|keep|put|show|avoid|include|wait|open|close|delete|remove|call|read|record|verify|build|ship|cite|name|mark|commit|rebase|document|lint|format|log|skip|pin|label|tag|link|attach|scan|grep|reply|answer|confirm|block|require|land|release|publish|record|start|finish|stop)\b/i;
|
|
150
|
+
// ── Steering type (deterministic; the operator can edit it at Remember) ─────────────────────────
|
|
151
|
+
const STEERING_KEYWORDS = [
|
|
152
|
+
['security', /\b(?:secur\w*|secrets?|tokens?|credentials?|passwords?|auth\w*|permissions?|leak\w*|vulnerab\w*|encrypt\w*)\b/i],
|
|
153
|
+
['compliance', /\b(?:complian\w*|gdpr|pci|hipaa|soc ?2|audit\w*|licen[cs]\w*|legal|regulat\w*|privacy|pii)\b/i],
|
|
154
|
+
['testing', /\b(?:tests?|testing|tested|checks?|walkthroughs?|e2e|qa|coverage|assert\w*|verif\w*|lint\w*|ci)\b/i],
|
|
155
|
+
['operations', /\b(?:deploy\w*|releases?|release|publish\w*|rollback|incidents?|monitor\w*|disk|daemons?|ops|merge|merging|tags?|tagging|on-?call)\b/i],
|
|
156
|
+
['design-ux', /\b(?:design|ux|ui|copy|wording|layout|colou?rs?|fonts?|accessib\w*|a11y|screens?|pages?|buttons?|calm\w*)\b/i],
|
|
157
|
+
['architecture', /\b(?:architect\w*|modules?|services?|schemas?|apis?|interfaces?|layers?|dependenc\w*|database|seams?)\b/i],
|
|
158
|
+
];
|
|
159
|
+
export function steeringTypeOf(text) {
|
|
160
|
+
for (const [type, re] of STEERING_KEYWORDS)
|
|
161
|
+
if (re.test(text))
|
|
162
|
+
return type;
|
|
163
|
+
return 'development';
|
|
164
|
+
}
|
|
165
|
+
// ── The key (§4.4 step 5) and the in-force comparison ───────────────────────────────────────────
|
|
166
|
+
export function keyOf(template, polarity, body) {
|
|
167
|
+
const words = [...new Set(contentWords(body))].sort();
|
|
168
|
+
return `${template}|${polarity}|${words.join(' ')}`;
|
|
169
|
+
}
|
|
170
|
+
/** The key a stored rule's statement derives to, so a restatement is an exact key match. */
|
|
171
|
+
export function ruleKey(statement) {
|
|
172
|
+
const body = statement.trim().replace(/[.!]+$/, '');
|
|
173
|
+
const hit = matchTemplate(body, false);
|
|
174
|
+
if (hit === null)
|
|
175
|
+
return null;
|
|
176
|
+
const subject = [...new Set(contentWords(hit.body))].sort().join(' ');
|
|
177
|
+
return { key: keyOf(hit.template, hit.polarity, hit.body), polarity: hit.polarity, subject };
|
|
178
|
+
}
|
|
179
|
+
// ── The derivation ──────────────────────────────────────────────────────────────────────────────
|
|
180
|
+
export function deriveDecision(input) {
|
|
181
|
+
const scrub = scrubWords(input.words);
|
|
182
|
+
const words = scrub.words.trim();
|
|
183
|
+
const opener = STANDING_OPENER.exec(words.replace(POLITE_LEAD, ''));
|
|
184
|
+
const hasOpener = opener !== null;
|
|
185
|
+
let body = words.replace(POLITE_LEAD, '');
|
|
186
|
+
if (opener !== null)
|
|
187
|
+
body = body.slice(opener[0].length);
|
|
188
|
+
body = body.replace(POLITE_LEAD, '').trim().replace(/[.!]+$/, '');
|
|
189
|
+
const content = contentWords(body);
|
|
190
|
+
const exclusions = exclusionsOf(words, hasOpener, content.length);
|
|
191
|
+
// An excluded utterance is never shaped into a rule (a question, a one-off, a bare opener).
|
|
192
|
+
const hit = exclusions.length > 0 ? null : matchTemplate(body, hasOpener);
|
|
193
|
+
let template = hit?.template ?? null;
|
|
194
|
+
let polarity = hit?.polarity ?? null;
|
|
195
|
+
let statement = hit?.statement ?? null;
|
|
196
|
+
let keyBody = hit?.body ?? body;
|
|
197
|
+
if (hit === null && hasOpener && exclusions.length === 0 && content.length >= 3) {
|
|
198
|
+
// The "in your words" row: a standing opener over a body no template shapes — offered as typed.
|
|
199
|
+
template = 'in-your-words';
|
|
200
|
+
polarity = /^(?:do\s+not|don'?t|no)\b/i.test(body) ? 'dont' : 'do';
|
|
201
|
+
statement = sentence(body);
|
|
202
|
+
keyBody = body;
|
|
203
|
+
}
|
|
204
|
+
const ruleContent = contentWords(keyBody);
|
|
205
|
+
const general = ruleContent.length >= 3;
|
|
206
|
+
const durable = exclusions.length === 0 && template !== null;
|
|
207
|
+
const checkable = template !== null && (template !== 'in-your-words' || CHECKABLE_VERB.test(keyBody));
|
|
208
|
+
const key = template !== null && polarity !== null ? keyOf(template, polarity, keyBody) : null;
|
|
209
|
+
const recurrenceHit = key !== null ? input.recurrence?.(key) ?? null : null;
|
|
210
|
+
const recurrence = recurrenceHit ?? { count: 0, first_at: input.now ?? Date.now(), projects: [] };
|
|
211
|
+
const scope = input.projectId !== null ? 'project' : 'everywhere';
|
|
212
|
+
const steering_type = input.labels?.steering_type ?? steeringTypeOf(statement ?? body);
|
|
213
|
+
const base = {
|
|
214
|
+
words,
|
|
215
|
+
redacted: scrub.redacted,
|
|
216
|
+
template,
|
|
217
|
+
exclusions,
|
|
218
|
+
dgc: { durable, general, checkable },
|
|
219
|
+
recurrence,
|
|
220
|
+
statement,
|
|
221
|
+
polarity,
|
|
222
|
+
key,
|
|
223
|
+
scope,
|
|
224
|
+
steering_type,
|
|
225
|
+
};
|
|
226
|
+
if (exclusions.length > 0 || key === null || polarity === null) {
|
|
227
|
+
return { ...base, route: modelOffers(input.labels, durable, general, checkable, recurrence.count) ? 'offer' : 'ledger' };
|
|
228
|
+
}
|
|
229
|
+
// Compare with the in-force rules that apply here (this project's, or global).
|
|
230
|
+
const subject = [...new Set(ruleContent)].sort().join(' ');
|
|
231
|
+
for (const rule of input.inForce) {
|
|
232
|
+
if (rule.project !== undefined && rule.project !== input.projectId)
|
|
233
|
+
continue;
|
|
234
|
+
const rk = ruleKey(rule.statement);
|
|
235
|
+
if (rk === null)
|
|
236
|
+
continue;
|
|
237
|
+
if (rk.key === key)
|
|
238
|
+
return { ...base, route: 'restated', rule_ref: rule.id };
|
|
239
|
+
}
|
|
240
|
+
for (const rule of input.inForce) {
|
|
241
|
+
if (rule.project !== undefined && rule.project !== input.projectId)
|
|
242
|
+
continue;
|
|
243
|
+
const rk = ruleKey(rule.statement);
|
|
244
|
+
if (rk === null)
|
|
245
|
+
continue;
|
|
246
|
+
if (rk.subject === subject && subject !== '' && rk.polarity !== polarity) {
|
|
247
|
+
return { ...base, route: 'conflict', rule_ref: rule.id };
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// The model may name an in-force rule this restates: a question, never a silent swallow.
|
|
251
|
+
const sameAs = input.labels?.same_as;
|
|
252
|
+
if (typeof sameAs === 'string' && input.inForce.some((r) => r.id === sameAs)) {
|
|
253
|
+
return { ...base, route: 'maybe-restated', rule_ref: sameAs };
|
|
254
|
+
}
|
|
255
|
+
const autoEligible = input.actorKind === 'human' &&
|
|
256
|
+
input.authMode === 'required' &&
|
|
257
|
+
input.wordsSource === 'typed' &&
|
|
258
|
+
(template === 'T1-always' || template === 'T2-never') &&
|
|
259
|
+
durable &&
|
|
260
|
+
general &&
|
|
261
|
+
input.projectId !== null &&
|
|
262
|
+
input.labels?.approves_proposal !== true &&
|
|
263
|
+
!scrub.redacted;
|
|
264
|
+
if (autoEligible)
|
|
265
|
+
return { ...base, route: 'auto' };
|
|
266
|
+
if (durable && general)
|
|
267
|
+
return { ...base, route: 'offer' };
|
|
268
|
+
if (modelOffers(input.labels, durable, general, checkable, recurrence.count))
|
|
269
|
+
return { ...base, route: 'offer' };
|
|
270
|
+
return { ...base, route: 'ledger' };
|
|
271
|
+
}
|
|
272
|
+
/** The model's offer arm: type ∈ {rule, correction, scope} ∧ codify ∧ D ∧ G ∧ (C ∨ R). */
|
|
273
|
+
function modelOffers(labels, durable, general, checkable, recurrences) {
|
|
274
|
+
if (labels === undefined)
|
|
275
|
+
return false;
|
|
276
|
+
return ((labels.type === 'rule' || labels.type === 'correction' || labels.type === 'scope') &&
|
|
277
|
+
labels.codify &&
|
|
278
|
+
durable &&
|
|
279
|
+
general &&
|
|
280
|
+
(checkable || recurrences > 0));
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=derive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"derive.js","sourceRoot":"","sources":["../../src/decisions/derive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision capture's bus facts (DES-decision-capture §4.6, DC-S4a). Post-commit only; domain
|
|
3
|
+
* column `wicked-crew` (the project bus's emit). Payloads carry ids and counts, NEVER words — the
|
|
4
|
+
* engine's rule — so the operator's words stay in the 0600 ledger. Idempotency keys are
|
|
5
|
+
* type-inclusive and occurrence-unique. (`wicked.crew.rule.considered` is DC-S7's.)
|
|
6
|
+
*/
|
|
7
|
+
export declare const DECISION_DETECTED = "wicked.crew.decision.detected";
|
|
8
|
+
export declare const DECISION_OFFERED = "wicked.crew.decision.offered";
|
|
9
|
+
export declare const DECISION_REMEMBERED = "wicked.crew.decision.remembered";
|
|
10
|
+
export declare const DECISION_UNDONE = "wicked.crew.decision.undone";
|
|
11
|
+
export declare const DECISION_DISMISSED = "wicked.crew.decision.dismissed";
|
|
12
|
+
export declare const DECISION_RESTATED = "wicked.crew.decision.restated";
|
|
13
|
+
export declare const DECISION_WIDENED = "wicked.crew.decision.widened";
|
|
14
|
+
export interface DecisionBusEmit {
|
|
15
|
+
(type: string, payload: Record<string, unknown>, idempotencyKey: string): Promise<boolean>;
|
|
16
|
+
}
|
|
17
|
+
/** The fact for one decision event — the payload is ids/enums/counts only (a test pins no words). */
|
|
18
|
+
export declare function decisionFact(type: string, payload: Record<string, string | number | boolean | null | undefined>, key: string): {
|
|
19
|
+
type: string;
|
|
20
|
+
payload: Record<string, string | number | boolean | null>;
|
|
21
|
+
key: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/decisions/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AACjE,eAAO,MAAM,gBAAgB,iCAAiC,CAAC;AAC/D,eAAO,MAAM,mBAAmB,oCAAoC,CAAC;AACrE,eAAO,MAAM,eAAe,gCAAgC,CAAC;AAC7D,eAAO,MAAM,kBAAkB,mCAAmC,CAAC;AACnE,eAAO,MAAM,iBAAiB,kCAAkC,CAAC;AACjE,eAAO,MAAM,gBAAgB,iCAAiC,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5F;AAED,qGAAqG;AACrG,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC,EACrE,GAAG,EAAE,MAAM,GACV;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAI1F"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decision capture's bus facts (DES-decision-capture §4.6, DC-S4a). Post-commit only; domain
|
|
3
|
+
* column `wicked-crew` (the project bus's emit). Payloads carry ids and counts, NEVER words — the
|
|
4
|
+
* engine's rule — so the operator's words stay in the 0600 ledger. Idempotency keys are
|
|
5
|
+
* type-inclusive and occurrence-unique. (`wicked.crew.rule.considered` is DC-S7's.)
|
|
6
|
+
*/
|
|
7
|
+
export const DECISION_DETECTED = 'wicked.crew.decision.detected';
|
|
8
|
+
export const DECISION_OFFERED = 'wicked.crew.decision.offered';
|
|
9
|
+
export const DECISION_REMEMBERED = 'wicked.crew.decision.remembered';
|
|
10
|
+
export const DECISION_UNDONE = 'wicked.crew.decision.undone';
|
|
11
|
+
export const DECISION_DISMISSED = 'wicked.crew.decision.dismissed';
|
|
12
|
+
export const DECISION_RESTATED = 'wicked.crew.decision.restated';
|
|
13
|
+
export const DECISION_WIDENED = 'wicked.crew.decision.widened';
|
|
14
|
+
/** The fact for one decision event — the payload is ids/enums/counts only (a test pins no words). */
|
|
15
|
+
export function decisionFact(type, payload, key) {
|
|
16
|
+
const clean = {};
|
|
17
|
+
for (const [k, v] of Object.entries(payload))
|
|
18
|
+
if (v !== undefined)
|
|
19
|
+
clean[k] = v;
|
|
20
|
+
return { type, payload: clean, key };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/decisions/events.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAC/D,MAAM,CAAC,MAAM,mBAAmB,GAAG,iCAAiC,CAAC;AACrE,MAAM,CAAC,MAAM,eAAe,GAAG,6BAA6B,CAAC;AAC7D,MAAM,CAAC,MAAM,kBAAkB,GAAG,gCAAgC,CAAC;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAG,+BAA+B,CAAC;AACjE,MAAM,CAAC,MAAM,gBAAgB,GAAG,8BAA8B,CAAC;AAM/D,qGAAqG;AACrG,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,OAAqE,EACrE,GAAW;IAEX,MAAM,KAAK,GAAqD,EAAE,CAAC;IACnE,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,KAAK,SAAS;YAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAChF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;AACvC,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where operator words enter the ledger (DES-decision-capture §4.3.1 / §4.3.2, DC-S4a).
|
|
3
|
+
*
|
|
4
|
+
* The structured hosts — a gate note, an elicitation answer, a run inject — call
|
|
5
|
+
* {@link ingestDecision} POST-COMMIT, after their action succeeded. Only a `human` actor is
|
|
6
|
+
* recorded: an agent's words are never a decision source (operator decision 4). `auth_mode` is the
|
|
7
|
+
* daemon's resolved auth and decides auto eligibility (§4.4). Derivation is deterministic; under
|
|
8
|
+
* `WICKED_DECISIONS=on` the record's route is then acted on (auto → `remember()`, offer → the review
|
|
9
|
+
* queue). Never throws into the host route: a failure is logged and the host's answer stands.
|
|
10
|
+
*/
|
|
11
|
+
import type { Actor } from '../core/types.js';
|
|
12
|
+
import { type DecisionService } from './land.js';
|
|
13
|
+
import type { DecisionHost, DecisionRecord } from './types.js';
|
|
14
|
+
export interface HostWords {
|
|
15
|
+
host: Extract<DecisionHost, 'gate' | 'elicitation' | 'inject'>;
|
|
16
|
+
actor: Actor;
|
|
17
|
+
/** The operator's verbatim free text ('' when the decision was a bare choice). */
|
|
18
|
+
words: string;
|
|
19
|
+
/** A bare approve/reject, or a picked elicitation option, when there were no words. */
|
|
20
|
+
choice?: string;
|
|
21
|
+
projectId: string | null;
|
|
22
|
+
runId: string;
|
|
23
|
+
ord?: number;
|
|
24
|
+
gateId?: string;
|
|
25
|
+
elicitationId?: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function ingestDecision(service: DecisionService, input: HostWords): Promise<DecisionRecord | null>;
|
|
28
|
+
//# sourceMappingURL=ingest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingest.d.ts","sourceRoot":"","sources":["../../src/decisions/ingest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE/D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,CAAC,CAAC;IAC/D,KAAK,EAAE,KAAK,CAAC;IACb,kFAAkF;IAClF,KAAK,EAAE,MAAM,CAAC;IACd,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CA4E/G"}
|