wicked-crew 0.7.40 → 0.7.45
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/audit.d.ts +3 -0
- package/dist/api/audit.d.ts.map +1 -1
- package/dist/api/audit.js +2 -0
- package/dist/api/audit.js.map +1 -1
- package/dist/api/capture.d.ts +149 -0
- package/dist/api/capture.d.ts.map +1 -0
- package/dist/api/capture.js +330 -0
- package/dist/api/capture.js.map +1 -0
- package/dist/api/chat-citations.d.ts +174 -0
- package/dist/api/chat-citations.d.ts.map +1 -0
- package/dist/api/chat-citations.js +528 -0
- package/dist/api/chat-citations.js.map +1 -0
- package/dist/api/chat-transcripts.d.ts +20 -1
- package/dist/api/chat-transcripts.d.ts.map +1 -1
- package/dist/api/chat-transcripts.js +29 -0
- package/dist/api/chat-transcripts.js.map +1 -1
- package/dist/api/delivery-cache.d.ts +2 -2
- package/dist/api/delivery-freeze.d.ts +66 -0
- package/dist/api/delivery-freeze.d.ts.map +1 -0
- package/dist/api/delivery-freeze.js +104 -0
- package/dist/api/delivery-freeze.js.map +1 -0
- package/dist/api/delivery-index.d.ts +53 -9
- package/dist/api/delivery-index.d.ts.map +1 -1
- package/dist/api/delivery-index.js +115 -22
- package/dist/api/delivery-index.js.map +1 -1
- package/dist/api/demo.d.ts +90 -0
- package/dist/api/demo.d.ts.map +1 -0
- package/dist/api/demo.js +492 -0
- package/dist/api/demo.js.map +1 -0
- package/dist/api/diagnostics.d.ts +64 -1
- package/dist/api/diagnostics.d.ts.map +1 -1
- package/dist/api/diagnostics.js +129 -1
- package/dist/api/diagnostics.js.map +1 -1
- package/dist/api/eval-sample.d.ts +6 -6
- package/dist/api/governance-steering.d.ts +2 -2
- package/dist/api/mcp.d.ts +282 -0
- package/dist/api/mcp.d.ts.map +1 -0
- package/dist/api/mcp.js +521 -0
- package/dist/api/mcp.js.map +1 -0
- package/dist/api/plan-schema.d.ts +56 -0
- package/dist/api/plan-schema.d.ts.map +1 -0
- package/dist/api/plan-schema.js +26 -0
- package/dist/api/plan-schema.js.map +1 -0
- package/dist/api/roster-standing.d.ts +15 -2
- package/dist/api/roster-standing.d.ts.map +1 -1
- package/dist/api/roster-standing.js +55 -3
- package/dist/api/roster-standing.js.map +1 -1
- package/dist/api/routes.d.ts +630 -51
- package/dist/api/routes.d.ts.map +1 -1
- package/dist/api/routes.js +738 -127
- package/dist/api/routes.js.map +1 -1
- package/dist/api/run-files.d.ts.map +1 -1
- package/dist/api/run-files.js +31 -2
- package/dist/api/run-files.js.map +1 -1
- package/dist/api/run-liveness.d.ts +41 -0
- package/dist/api/run-liveness.d.ts.map +1 -0
- package/dist/api/run-liveness.js +166 -0
- package/dist/api/run-liveness.js.map +1 -0
- package/dist/api/seat-health.d.ts.map +1 -1
- package/dist/api/seat-health.js +20 -4
- package/dist/api/seat-health.js.map +1 -1
- package/dist/api/seat-probe.d.ts +141 -0
- package/dist/api/seat-probe.d.ts.map +1 -0
- package/dist/api/seat-probe.js +257 -0
- package/dist/api/seat-probe.js.map +1 -0
- package/dist/api/seat-record.d.ts +40 -0
- package/dist/api/seat-record.d.ts.map +1 -0
- package/dist/api/seat-record.js +218 -0
- package/dist/api/seat-record.js.map +1 -0
- package/dist/api/seat-signin.d.ts.map +1 -1
- package/dist/api/seat-signin.js +3 -1
- package/dist/api/seat-signin.js.map +1 -1
- package/dist/api/seat-standing.d.ts +24 -4
- package/dist/api/seat-standing.d.ts.map +1 -1
- package/dist/api/seat-standing.js +50 -3
- package/dist/api/seat-standing.js.map +1 -1
- package/dist/api/server.d.ts +34 -48
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +283 -107
- package/dist/api/server.js.map +1 -1
- package/dist/api/skills.d.ts +3 -1
- package/dist/api/skills.d.ts.map +1 -1
- package/dist/api/skills.js +7 -2
- package/dist/api/skills.js.map +1 -1
- package/dist/api/stall-watchdog.d.ts +34 -3
- package/dist/api/stall-watchdog.d.ts.map +1 -1
- package/dist/api/stall-watchdog.js +107 -8
- package/dist/api/stall-watchdog.js.map +1 -1
- package/dist/api/steering-landing.d.ts +6 -6
- package/dist/api/steering-landing.d.ts.map +1 -1
- package/dist/api/steering-landing.js +7 -9
- package/dist/api/steering-landing.js.map +1 -1
- package/dist/api/testing.d.ts +6 -4
- package/dist/api/testing.d.ts.map +1 -1
- package/dist/api/testing.js +82 -47
- package/dist/api/testing.js.map +1 -1
- package/dist/campaign/boot-resume.d.ts +34 -0
- package/dist/campaign/boot-resume.d.ts.map +1 -0
- package/dist/campaign/boot-resume.js +45 -0
- package/dist/campaign/boot-resume.js.map +1 -0
- package/dist/campaigns/rollup.d.ts +4 -1
- package/dist/campaigns/rollup.d.ts.map +1 -1
- package/dist/campaigns/rollup.js +6 -1
- package/dist/campaigns/rollup.js.map +1 -1
- package/dist/campaigns/routes.d.ts +2 -2
- package/dist/cli/bearer.d.ts +27 -1
- package/dist/cli/bearer.d.ts.map +1 -1
- package/dist/cli/bearer.js +62 -2
- package/dist/cli/bearer.js.map +1 -1
- package/dist/cli/governance.d.ts +11 -0
- package/dist/cli/governance.d.ts.map +1 -1
- package/dist/cli/governance.js +8 -2
- package/dist/cli/governance.js.map +1 -1
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +140 -75
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts +11 -0
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +40 -9
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/service.d.ts +78 -0
- package/dist/cli/service.d.ts.map +1 -0
- package/dist/cli/service.js +334 -0
- package/dist/cli/service.js.map +1 -0
- package/dist/core/adapter.d.ts +238 -12
- package/dist/core/adapter.d.ts.map +1 -1
- package/dist/core/adapter.js +619 -157
- package/dist/core/adapter.js.map +1 -1
- package/dist/core/bridge-reaper.d.ts +4 -1
- package/dist/core/bridge-reaper.d.ts.map +1 -1
- package/dist/core/bridge-reaper.js +15 -1
- package/dist/core/bridge-reaper.js.map +1 -1
- package/dist/core/bus-notice.d.ts +27 -0
- package/dist/core/bus-notice.d.ts.map +1 -0
- package/dist/core/bus-notice.js +24 -0
- package/dist/core/bus-notice.js.map +1 -0
- package/dist/core/bus.d.ts +99 -0
- package/dist/core/bus.d.ts.map +1 -0
- package/dist/core/bus.js +176 -0
- package/dist/core/bus.js.map +1 -0
- package/dist/core/deliver-exclusions.d.ts +71 -0
- package/dist/core/deliver-exclusions.d.ts.map +1 -0
- package/dist/core/deliver-exclusions.js +110 -0
- package/dist/core/deliver-exclusions.js.map +1 -0
- package/dist/core/deliver-text.d.ts +61 -14
- package/dist/core/deliver-text.d.ts.map +1 -1
- package/dist/core/deliver-text.js +178 -30
- package/dist/core/deliver-text.js.map +1 -1
- package/dist/core/deliver-triage.d.ts +11 -2
- package/dist/core/deliver-triage.d.ts.map +1 -1
- package/dist/core/deliver-triage.js +19 -1
- package/dist/core/deliver-triage.js.map +1 -1
- package/dist/core/deliver.d.ts +161 -3
- package/dist/core/deliver.d.ts.map +1 -1
- package/dist/core/deliver.js +463 -25
- package/dist/core/deliver.js.map +1 -1
- package/dist/core/deliverable-floor.d.ts.map +1 -1
- package/dist/core/deliverable-floor.js +5 -7
- package/dist/core/deliverable-floor.js.map +1 -1
- package/dist/core/engine-bus.d.ts +40 -0
- package/dist/core/engine-bus.d.ts.map +1 -0
- package/dist/core/engine-bus.js +27 -0
- package/dist/core/engine-bus.js.map +1 -0
- package/dist/core/estate-mcp-client.d.ts +87 -5
- package/dist/core/estate-mcp-client.d.ts.map +1 -1
- package/dist/core/estate-mcp-client.js +90 -11
- package/dist/core/estate-mcp-client.js.map +1 -1
- package/dist/core/linked-issues.d.ts +46 -0
- package/dist/core/linked-issues.d.ts.map +1 -0
- package/dist/core/linked-issues.js +123 -0
- package/dist/core/linked-issues.js.map +1 -0
- package/dist/core/run-identity.d.ts +100 -0
- package/dist/core/run-identity.d.ts.map +1 -0
- package/dist/core/run-identity.js +178 -0
- package/dist/core/run-identity.js.map +1 -0
- package/dist/core/shutdown.d.ts +16 -0
- package/dist/core/shutdown.d.ts.map +1 -0
- package/dist/core/shutdown.js +39 -0
- package/dist/core/shutdown.js.map +1 -0
- package/dist/core/types.d.ts +15 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +4 -0
- package/dist/core/types.js.map +1 -1
- package/dist/interactive/bridge-pool.d.ts +67 -3
- package/dist/interactive/bridge-pool.d.ts.map +1 -1
- package/dist/interactive/bridge-pool.js +129 -13
- package/dist/interactive/bridge-pool.js.map +1 -1
- package/dist/interactive/bridge-root.d.ts +9 -0
- package/dist/interactive/bridge-root.d.ts.map +1 -1
- package/dist/interactive/bridge-root.js +11 -4
- package/dist/interactive/bridge-root.js.map +1 -1
- package/dist/interactive/chat-events.d.ts +14 -9
- package/dist/interactive/chat-events.d.ts.map +1 -1
- package/dist/interactive/chat-events.js +55 -57
- package/dist/interactive/chat-events.js.map +1 -1
- package/dist/interactive/council-outcome.d.ts +1 -0
- package/dist/interactive/council-outcome.d.ts.map +1 -1
- package/dist/interactive/council-outcome.js +33 -0
- package/dist/interactive/council-outcome.js.map +1 -1
- package/dist/interactive/draft-events.d.ts +36 -17
- package/dist/interactive/draft-events.d.ts.map +1 -1
- package/dist/interactive/draft-events.js +121 -92
- package/dist/interactive/draft-events.js.map +1 -1
- package/dist/interactive/draft-skill.d.ts +59 -0
- package/dist/interactive/draft-skill.d.ts.map +1 -1
- package/dist/interactive/draft-skill.js +233 -0
- package/dist/interactive/draft-skill.js.map +1 -1
- package/dist/interactive/edit-events.d.ts +1 -14
- package/dist/interactive/edit-events.d.ts.map +1 -1
- package/dist/interactive/edit-events.js +37 -70
- package/dist/interactive/edit-events.js.map +1 -1
- package/dist/interactive/proxy-routes.d.ts +2 -2
- package/dist/interactive/proxy-routes.d.ts.map +1 -1
- package/dist/interactive/proxy-routes.js +4 -13
- package/dist/interactive/proxy-routes.js.map +1 -1
- package/dist/interactive/ws-relay.d.ts +9 -10
- package/dist/interactive/ws-relay.d.ts.map +1 -1
- package/dist/interactive/ws-relay.js +23 -50
- package/dist/interactive/ws-relay.js.map +1 -1
- package/dist/mcp/broker.d.ts +88 -0
- package/dist/mcp/broker.d.ts.map +1 -0
- package/dist/mcp/broker.js +307 -0
- package/dist/mcp/broker.js.map +1 -0
- package/dist/mcp/call-records.d.ts +61 -0
- package/dist/mcp/call-records.d.ts.map +1 -0
- package/dist/mcp/call-records.js +135 -0
- package/dist/mcp/call-records.js.map +1 -0
- package/dist/mcp/classify.d.ts +45 -0
- package/dist/mcp/classify.d.ts.map +1 -0
- package/dist/mcp/classify.js +83 -0
- package/dist/mcp/classify.js.map +1 -0
- package/dist/mcp/discovery.d.ts +24 -0
- package/dist/mcp/discovery.d.ts.map +1 -0
- package/dist/mcp/discovery.js +78 -0
- package/dist/mcp/discovery.js.map +1 -0
- package/dist/mcp/invoke.d.ts +36 -0
- package/dist/mcp/invoke.d.ts.map +1 -0
- package/dist/mcp/invoke.js +80 -0
- package/dist/mcp/invoke.js.map +1 -0
- package/dist/mcp/policies.d.ts +110 -0
- package/dist/mcp/policies.d.ts.map +1 -0
- package/dist/mcp/policies.js +400 -0
- package/dist/mcp/policies.js.map +1 -0
- package/dist/mcp/probe.d.ts +66 -0
- package/dist/mcp/probe.d.ts.map +1 -0
- package/dist/mcp/probe.js +116 -0
- package/dist/mcp/probe.js.map +1 -0
- package/dist/mcp/redact.d.ts +34 -0
- package/dist/mcp/redact.d.ts.map +1 -0
- package/dist/mcp/redact.js +84 -0
- package/dist/mcp/redact.js.map +1 -0
- package/dist/mcp/registry-store.d.ts +69 -0
- package/dist/mcp/registry-store.d.ts.map +1 -0
- package/dist/mcp/registry-store.js +82 -0
- package/dist/mcp/registry-store.js.map +1 -0
- package/dist/mcp/registry.d.ts +147 -0
- package/dist/mcp/registry.d.ts.map +1 -0
- package/dist/mcp/registry.js +509 -0
- package/dist/mcp/registry.js.map +1 -0
- package/dist/mcp/rest.d.ts +111 -0
- package/dist/mcp/rest.d.ts.map +1 -0
- package/dist/mcp/rest.js +606 -0
- package/dist/mcp/rest.js.map +1 -0
- package/dist/mcp/secrets.d.ts +66 -0
- package/dist/mcp/secrets.d.ts.map +1 -0
- package/dist/mcp/secrets.js +180 -0
- package/dist/mcp/secrets.js.map +1 -0
- package/dist/mcp/tool-list.d.ts +25 -0
- package/dist/mcp/tool-list.d.ts.map +1 -0
- package/dist/mcp/tool-list.js +62 -0
- package/dist/mcp/tool-list.js.map +1 -0
- package/dist/mcp/upstream-error.d.ts +12 -0
- package/dist/mcp/upstream-error.d.ts.map +1 -0
- package/dist/mcp/upstream-error.js +14 -0
- package/dist/mcp/upstream-error.js.map +1 -0
- package/dist/mcp/usage.d.ts +31 -0
- package/dist/mcp/usage.d.ts.map +1 -0
- package/dist/mcp/usage.js +159 -0
- package/dist/mcp/usage.js.map +1 -0
- package/dist/presets/routes.d.ts +53 -0
- package/dist/presets/routes.d.ts.map +1 -0
- package/dist/presets/routes.js +115 -0
- package/dist/presets/routes.js.map +1 -0
- package/dist/projects/activity.d.ts +6 -18
- package/dist/projects/activity.d.ts.map +1 -1
- package/dist/projects/activity.js +17 -60
- package/dist/projects/activity.js.map +1 -1
- package/dist/projects/events.d.ts +6 -5
- package/dist/projects/events.d.ts.map +1 -1
- package/dist/projects/events.js +33 -58
- package/dist/projects/events.js.map +1 -1
- package/dist/projects/routes.d.ts.map +1 -1
- package/dist/projects/routes.js +19 -0
- package/dist/projects/routes.js.map +1 -1
- package/dist/projects/state-home-preflight.d.ts.map +1 -1
- package/dist/projects/state-home-preflight.js +7 -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 +9 -1
- package/dist/projects/state-home-registry.js.map +1 -1
- package/dist/qe/acceptance.d.ts +28 -28
- package/dist/qe/acceptance.d.ts.map +1 -1
- package/dist/qe/acceptance.js +60 -61
- package/dist/qe/acceptance.js.map +1 -1
- package/dist/qe/test-sets.d.ts +3 -5
- package/dist/qe/test-sets.d.ts.map +1 -1
- package/dist/qe/test-sets.js +5 -7
- package/dist/qe/test-sets.js.map +1 -1
- package/dist/skills/installed.d.ts +51 -0
- package/dist/skills/installed.d.ts.map +1 -0
- package/dist/skills/installed.js +46 -0
- package/dist/skills/installed.js.map +1 -0
- package/dist/standing-orders/evaluator.d.ts +113 -0
- package/dist/standing-orders/evaluator.d.ts.map +1 -0
- package/dist/standing-orders/evaluator.js +225 -0
- package/dist/standing-orders/evaluator.js.map +1 -0
- package/dist/standing-orders/history.d.ts +58 -0
- package/dist/standing-orders/history.d.ts.map +1 -0
- package/dist/standing-orders/history.js +117 -0
- package/dist/standing-orders/history.js.map +1 -0
- package/dist/standing-orders/parse.d.ts +19 -0
- package/dist/standing-orders/parse.d.ts.map +1 -0
- package/dist/standing-orders/parse.js +75 -0
- package/dist/standing-orders/parse.js.map +1 -0
- package/dist/standing-orders/routes.d.ts +180 -0
- package/dist/standing-orders/routes.d.ts.map +1 -0
- package/dist/standing-orders/routes.js +95 -0
- package/dist/standing-orders/routes.js.map +1 -0
- package/dist/standing-orders/store.d.ts +154 -0
- package/dist/standing-orders/store.d.ts.map +1 -0
- package/dist/standing-orders/store.js +189 -0
- package/dist/standing-orders/store.js.map +1 -0
- package/dist/studio/assets/index-CvV5qITf.css +32 -0
- package/dist/studio/assets/index-jCOy6Ns7.js +568 -0
- package/dist/studio/index.html +3 -3
- package/dist/studio/testid-inventory.json +3274 -894
- package/dist/team/key.d.ts +5 -0
- package/dist/team/key.d.ts.map +1 -0
- package/dist/team/key.js +21 -0
- package/dist/team/key.js.map +1 -0
- package/dist/team/routes.d.ts +196 -0
- package/dist/team/routes.d.ts.map +1 -0
- package/dist/team/routes.js +274 -0
- package/dist/team/routes.js.map +1 -0
- package/dist/team/ws-relay.d.ts +39 -0
- package/dist/team/ws-relay.d.ts.map +1 -0
- package/dist/team/ws-relay.js +63 -0
- package/dist/team/ws-relay.js.map +1 -0
- package/endpoint-manifest.json +502 -6
- package/package.json +6 -6
- package/dist/interactive/demo-events.d.ts +0 -367
- package/dist/interactive/demo-events.d.ts.map +0 -1
- package/dist/interactive/demo-events.js +0 -1293
- package/dist/interactive/demo-events.js.map +0 -1
- package/dist/qe/gate-events.d.ts +0 -113
- package/dist/qe/gate-events.d.ts.map +0 -1
- package/dist/qe/gate-events.js +0 -172
- package/dist/qe/gate-events.js.map +0 -1
- package/dist/studio/assets/index-Bg7Z3BR-.css +0 -32
- package/dist/studio/assets/index-BvOFMjf9.js +0 -554
package/dist/api/audit.d.ts
CHANGED
|
@@ -26,6 +26,9 @@ export declare function defaultAuditPath(env?: NodeJS.ProcessEnv): string;
|
|
|
26
26
|
export interface AuditReadFilter {
|
|
27
27
|
runId?: string;
|
|
28
28
|
action?: string;
|
|
29
|
+
/** Inclusive lower bound on the entry clock (`ts`, unix millis): keep entries with `ts >= since`.
|
|
30
|
+
* Applied BEFORE `limit`, so `limit` trims the newest N of the in-window entries. */
|
|
31
|
+
since?: number;
|
|
29
32
|
/** Max entries returned (newest first). Default 200, capped at 1000. */
|
|
30
33
|
limit?: number;
|
|
31
34
|
}
|
package/dist/api/audit.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/api/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE7E;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAE7D,qBAAa,QAAQ;IAMjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAGd,IAAI,GAAE,MAA2B,EACzB,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAA6B;IAGvE;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,IAAI,QAAQ;IAMvB;;;;OAIG;IACH;;kFAE8E;IAC9E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,MAAM;IA0B3G,wCAAwC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAM3D;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIxD,gFAAgF;YAClE,IAAI;
|
|
1
|
+
{"version":3,"file":"audit.d.ts","sourceRoot":"","sources":["../../src/api/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAE7E;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;0FACsF;IACtF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,mFAAmF;AACnF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAE7D,qBAAa,QAAQ;IAMjB,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,KAAK,CAAoC;IACjD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAS;gBAGd,IAAI,GAAE,MAA2B,EACzB,IAAI,GAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAA6B;IAGvE;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,IAAI,QAAQ;IAMvB;;;;OAIG;IACH;;kFAE8E;IAC9E,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,MAAM;IA0B3G,wCAAwC;IACxC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAM3D;;;;;;;OAOG;IACH,OAAO,CAAC,MAAM,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAIxD,gFAAgF;YAClE,IAAI;CA2BnB"}
|
package/dist/api/audit.js
CHANGED
package/dist/api/audit.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/api/audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACnE,OAAO,GAAG,CAAC,uBAAuB,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE,WAAW,CAAC,CAAC;AAC5E,CAAC;
|
|
1
|
+
{"version":3,"file":"audit.js","sourceRoot":"","sources":["../../src/api/audit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Studio OS behaviour 8, "Capture anything": transcripts, photos and notes become intents,
|
|
3
|
+
* decisions and memories in the right project — PROPOSED, never silently learned.
|
|
4
|
+
*
|
|
5
|
+
* POST /projects/:id/capture notes + text files + photos land in a per-run inbox on the daemon
|
|
6
|
+
* host, and a small repo-less team run is launched THROUGH `POST /runs`
|
|
7
|
+
* (one launch path: membership, the state-home and roster checks, the
|
|
8
|
+
* audit trail), filed to the project, one read-only `understand` step.
|
|
9
|
+
* The run's only output is proposals in the EXISTING estate queue
|
|
10
|
+
* (`proposal.submit`), reviewed on `/proposals` like everything else.
|
|
11
|
+
*
|
|
12
|
+
* And the review's "edit" verb, {@link approveEdited}: estate has no proposal edit, so an accept WITH
|
|
13
|
+
* an edit submits the edited copy to the same queue, approves the copy, then rejects the original.
|
|
14
|
+
*
|
|
15
|
+
* Confidentiality ("patterns cross projects; client details never do") is estate's facet admission:
|
|
16
|
+
* a memory faceted `project:<id>` is recalled only under an intent naming that project, and the
|
|
17
|
+
* garden shim stamps the run's project onto every proposal it files. Crossing projects is therefore
|
|
18
|
+
* only ever a human accept that names `reach: "pattern"`, on a memory-class capture — the copy then
|
|
19
|
+
* drops its `project`/`repo` facets. Everything else (what is an intent, a decision, a memory; which
|
|
20
|
+
* seat reads the photo) is the team's judgment, stated in the brief, not code here.
|
|
21
|
+
*/
|
|
22
|
+
import type { FastifyInstance } from 'fastify';
|
|
23
|
+
import { z } from 'zod';
|
|
24
|
+
/** Notes are prose; a transcript is the biggest thing a person pastes. */
|
|
25
|
+
export declare const CAPTURE_NOTES_MAX_BYTES: number;
|
|
26
|
+
/** One dropped text file (a transcript, a meeting note). */
|
|
27
|
+
export declare const CAPTURE_TEXT_MAX_BYTES: number;
|
|
28
|
+
/** One decoded photo — a phone camera JPEG fits with room. */
|
|
29
|
+
export declare const CAPTURE_IMAGE_MAX_BYTES: number;
|
|
30
|
+
/** Every decoded byte of one capture together. */
|
|
31
|
+
export declare const CAPTURE_TOTAL_MAX_BYTES: number;
|
|
32
|
+
export declare const CAPTURE_MAX_FILES = 8;
|
|
33
|
+
/** The route's JSON body limit: the decoded total as base64 (4/3) plus the JSON around it. */
|
|
34
|
+
export declare const CAPTURE_BODY_LIMIT: number;
|
|
35
|
+
/** The image types a vision-capable seat reads, and the extension each lands with. */
|
|
36
|
+
export declare const CAPTURE_IMAGE_TYPES: Readonly<Record<string, readonly string[]>>;
|
|
37
|
+
export declare const CaptureSchema: z.ZodObject<{
|
|
38
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
39
|
+
files: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodObject<{
|
|
40
|
+
name: z.ZodString;
|
|
41
|
+
text: z.ZodString;
|
|
42
|
+
}, "strict", z.ZodTypeAny, {
|
|
43
|
+
text: string;
|
|
44
|
+
name: string;
|
|
45
|
+
}, {
|
|
46
|
+
text: string;
|
|
47
|
+
name: string;
|
|
48
|
+
}>, z.ZodObject<{
|
|
49
|
+
name: z.ZodString;
|
|
50
|
+
mediaType: z.ZodString;
|
|
51
|
+
dataBase64: z.ZodString;
|
|
52
|
+
}, "strict", z.ZodTypeAny, {
|
|
53
|
+
name: string;
|
|
54
|
+
mediaType: string;
|
|
55
|
+
dataBase64: string;
|
|
56
|
+
}, {
|
|
57
|
+
name: string;
|
|
58
|
+
mediaType: string;
|
|
59
|
+
dataBase64: string;
|
|
60
|
+
}>]>, "many">>;
|
|
61
|
+
}, "strict", z.ZodTypeAny, {
|
|
62
|
+
files?: ({
|
|
63
|
+
text: string;
|
|
64
|
+
name: string;
|
|
65
|
+
} | {
|
|
66
|
+
name: string;
|
|
67
|
+
mediaType: string;
|
|
68
|
+
dataBase64: string;
|
|
69
|
+
})[] | undefined;
|
|
70
|
+
notes?: string | undefined;
|
|
71
|
+
}, {
|
|
72
|
+
files?: ({
|
|
73
|
+
text: string;
|
|
74
|
+
name: string;
|
|
75
|
+
} | {
|
|
76
|
+
name: string;
|
|
77
|
+
mediaType: string;
|
|
78
|
+
dataBase64: string;
|
|
79
|
+
})[] | undefined;
|
|
80
|
+
notes?: string | undefined;
|
|
81
|
+
}>;
|
|
82
|
+
/** `POST /proposals/:id/approve` body — present only for an accept WITH an edit. */
|
|
83
|
+
export declare const ApproveEditSchema: z.ZodObject<{
|
|
84
|
+
content: z.ZodOptional<z.ZodString>;
|
|
85
|
+
reach: z.ZodOptional<z.ZodEnum<["project", "pattern"]>>;
|
|
86
|
+
}, "strict", z.ZodTypeAny, {
|
|
87
|
+
content?: string | undefined;
|
|
88
|
+
reach?: "project" | "pattern" | undefined;
|
|
89
|
+
}, {
|
|
90
|
+
content?: string | undefined;
|
|
91
|
+
reach?: "project" | "pattern" | undefined;
|
|
92
|
+
}>;
|
|
93
|
+
/** `POST /proposals` body — one preference a person files from a skin (studio's takes). Strict: the
|
|
94
|
+
* kind, tier and capture marker are the daemon's, never the caller's. */
|
|
95
|
+
export declare const FileProposalSchema: z.ZodObject<{
|
|
96
|
+
content: z.ZodString;
|
|
97
|
+
project: z.ZodOptional<z.ZodString>;
|
|
98
|
+
source: z.ZodOptional<z.ZodString>;
|
|
99
|
+
}, "strict", z.ZodTypeAny, {
|
|
100
|
+
content: string;
|
|
101
|
+
source?: string | undefined;
|
|
102
|
+
project?: string | undefined;
|
|
103
|
+
}, {
|
|
104
|
+
content: string;
|
|
105
|
+
source?: string | undefined;
|
|
106
|
+
project?: string | undefined;
|
|
107
|
+
}>;
|
|
108
|
+
/** Where a capture's materials land: a per-run inbox on the daemon host (the steering-author
|
|
109
|
+
* pattern — runs read the daemon's filesystem; only paths ride the problem statement). */
|
|
110
|
+
export declare function captureInboxDir(runId: string): string;
|
|
111
|
+
/**
|
|
112
|
+
* The capture inbox of each capture launch in flight, keyed by its run id. A worker's boundary is
|
|
113
|
+
* {sandbox, extraWriteRoots, ~/.claude/plugins} — even READS outside it are denied — so the run must
|
|
114
|
+
* declare its inbox as an extra root (the steering-author inbox does the same). `POST /runs` takes
|
|
115
|
+
* no roots from its body; it reads this in-process entry for the run id the capture route minted
|
|
116
|
+
* (a fresh UUID), so the root is never something a caller can ask for.
|
|
117
|
+
*/
|
|
118
|
+
export declare const captureLaunchRoots: Map<string, string>;
|
|
119
|
+
/** The brief the capture run reads: the materials and the filing contract, in one file so the
|
|
120
|
+
* problem statement stays one short line. */
|
|
121
|
+
export declare function captureBrief(projectId: string, paths: readonly string[]): string;
|
|
122
|
+
export declare function registerCaptureRoutes(app: FastifyInstance): void;
|
|
123
|
+
type EstateTool = (tool: string, args: Record<string, unknown>) => Promise<unknown>;
|
|
124
|
+
/** The outcome of {@link approveEdited}: an HTTP status and its body. */
|
|
125
|
+
export type EditedApproval = {
|
|
126
|
+
status: number;
|
|
127
|
+
body: Record<string, unknown>;
|
|
128
|
+
};
|
|
129
|
+
/**
|
|
130
|
+
* Accept a pending MEMORY proposal WITH an edit — submit the edited copy, approve the copy, then
|
|
131
|
+
* reject the original — and return the copy's approve outcome plus `edited: {from, to}`. The
|
|
132
|
+
* original stays pending until the copy is approved, so a failed approve loses nothing (the copy is
|
|
133
|
+
* withdrawn, so a retry leaves no duplicate pending); a reject
|
|
134
|
+
* that fails AFTER the approve answers 200 with `edited.originalPending: true` (the edit landed;
|
|
135
|
+
* the original is still in the queue for the person to reject), never a 502 inviting a retry that
|
|
136
|
+
* would promote a second copy. A
|
|
137
|
+
* `reach: "pattern"` copy drops the `project` and `repo` facets (it may now be recalled on any
|
|
138
|
+
* project); it is refused on anything but a captured memory (`payload.capture: "memory"`) — a
|
|
139
|
+
* decision or an intent is always the project's, and a memory no capture filed is not this verb's. A
|
|
140
|
+
* `reach: "project"` row keeps (or, when the worker filed none, gains) the project facet — the
|
|
141
|
+
* capture run's project, read from `projectOf(provenance.run_id)`. When nothing changes, the
|
|
142
|
+
* original is approved as filed (no copy).
|
|
143
|
+
*/
|
|
144
|
+
export declare function approveEdited(estateTool: EstateTool, id: string, edit: z.infer<typeof ApproveEditSchema>, projectOf: (runId: string) => string | undefined): Promise<EditedApproval>;
|
|
145
|
+
/** A plain approve or a reject of a proposal whose accept-with-edit is in flight is refused (409):
|
|
146
|
+
* it would decide the original while the edit is promoting its copy. */
|
|
147
|
+
export declare function editInFlight(id: string): boolean;
|
|
148
|
+
export {};
|
|
149
|
+
//# sourceMappingURL=capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.d.ts","sourceRoot":"","sources":["../../src/api/capture.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,0EAA0E;AAC1E,eAAO,MAAM,uBAAuB,QAAa,CAAC;AAClD,4DAA4D;AAC5D,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,8DAA8D;AAC9D,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,kDAAkD;AAClD,eAAO,MAAM,uBAAuB,QAAmB,CAAC;AACxD,eAAO,MAAM,iBAAiB,IAAI,CAAC;AACnC,8FAA8F;AAC9F,eAAO,MAAM,kBAAkB,QAA6D,CAAC;AAE7F,sFAAsF;AACtF,eAAO,MAAM,mBAAmB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAK3E,CAAC;AAQF,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAKf,CAAC;AAEZ,oFAAoF;AACpF,eAAO,MAAM,iBAAiB;;;;;;;;;EAKnB,CAAC;AAEZ;0EAC0E;AAC1E,eAAO,MAAM,kBAAkB;;;;;;;;;;;;EAMpB,CAAC;AAEZ;2FAC2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAIrD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,qBAA4B,CAAC;AAa5D;8CAC8C;AAC9C,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CA0BhF;AAmDD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAwDhE;AAED,KAAK,UAAU,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpF,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC;AAE/E;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,UAAU,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,EACvC,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAC/C,OAAO,CAAC,cAAc,CAAC,CAYzB;AAKD;yEACyE;AACzE,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEhD"}
|
|
@@ -0,0 +1,330 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Studio OS behaviour 8, "Capture anything": transcripts, photos and notes become intents,
|
|
3
|
+
* decisions and memories in the right project — PROPOSED, never silently learned.
|
|
4
|
+
*
|
|
5
|
+
* POST /projects/:id/capture notes + text files + photos land in a per-run inbox on the daemon
|
|
6
|
+
* host, and a small repo-less team run is launched THROUGH `POST /runs`
|
|
7
|
+
* (one launch path: membership, the state-home and roster checks, the
|
|
8
|
+
* audit trail), filed to the project, one read-only `understand` step.
|
|
9
|
+
* The run's only output is proposals in the EXISTING estate queue
|
|
10
|
+
* (`proposal.submit`), reviewed on `/proposals` like everything else.
|
|
11
|
+
*
|
|
12
|
+
* And the review's "edit" verb, {@link approveEdited}: estate has no proposal edit, so an accept WITH
|
|
13
|
+
* an edit submits the edited copy to the same queue, approves the copy, then rejects the original.
|
|
14
|
+
*
|
|
15
|
+
* Confidentiality ("patterns cross projects; client details never do") is estate's facet admission:
|
|
16
|
+
* a memory faceted `project:<id>` is recalled only under an intent naming that project, and the
|
|
17
|
+
* garden shim stamps the run's project onto every proposal it files. Crossing projects is therefore
|
|
18
|
+
* only ever a human accept that names `reach: "pattern"`, on a memory-class capture — the copy then
|
|
19
|
+
* drops its `project`/`repo` facets. Everything else (what is an intent, a decision, a memory; which
|
|
20
|
+
* seat reads the photo) is the team's judgment, stated in the brief, not code here.
|
|
21
|
+
*/
|
|
22
|
+
import { randomUUID } from 'node:crypto';
|
|
23
|
+
import { promises as fsp } from 'node:fs';
|
|
24
|
+
import { basename, extname, join } from 'node:path';
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
import { API_PREFIX } from './api-prefix.js';
|
|
27
|
+
const V = API_PREFIX;
|
|
28
|
+
/** Notes are prose; a transcript is the biggest thing a person pastes. */
|
|
29
|
+
export const CAPTURE_NOTES_MAX_BYTES = 256 * 1024;
|
|
30
|
+
/** One dropped text file (a transcript, a meeting note). */
|
|
31
|
+
export const CAPTURE_TEXT_MAX_BYTES = 512 * 1024;
|
|
32
|
+
/** One decoded photo — a phone camera JPEG fits with room. */
|
|
33
|
+
export const CAPTURE_IMAGE_MAX_BYTES = 10 * 1024 * 1024;
|
|
34
|
+
/** Every decoded byte of one capture together. */
|
|
35
|
+
export const CAPTURE_TOTAL_MAX_BYTES = 24 * 1024 * 1024;
|
|
36
|
+
export const CAPTURE_MAX_FILES = 8;
|
|
37
|
+
/** The route's JSON body limit: the decoded total as base64 (4/3) plus the JSON around it. */
|
|
38
|
+
export const CAPTURE_BODY_LIMIT = Math.ceil((CAPTURE_TOTAL_MAX_BYTES * 4) / 3) + 1024 * 1024;
|
|
39
|
+
/** The image types a vision-capable seat reads, and the extension each lands with. */
|
|
40
|
+
export const CAPTURE_IMAGE_TYPES = {
|
|
41
|
+
'image/png': ['.png'],
|
|
42
|
+
'image/jpeg': ['.jpg', '.jpeg'],
|
|
43
|
+
'image/gif': ['.gif'],
|
|
44
|
+
'image/webp': ['.webp'],
|
|
45
|
+
};
|
|
46
|
+
const NameSchema = z.string().min(1).max(128);
|
|
47
|
+
const CaptureTextFileSchema = z.object({ name: NameSchema, text: z.string() }).strict();
|
|
48
|
+
const CaptureImageFileSchema = z
|
|
49
|
+
.object({ name: NameSchema, mediaType: z.string().min(1), dataBase64: z.string().min(1) })
|
|
50
|
+
.strict();
|
|
51
|
+
export const CaptureSchema = z
|
|
52
|
+
.object({
|
|
53
|
+
notes: z.string().optional(),
|
|
54
|
+
files: z.array(z.union([CaptureTextFileSchema, CaptureImageFileSchema])).max(CAPTURE_MAX_FILES).optional(),
|
|
55
|
+
})
|
|
56
|
+
.strict();
|
|
57
|
+
/** `POST /proposals/:id/approve` body — present only for an accept WITH an edit. */
|
|
58
|
+
export const ApproveEditSchema = z
|
|
59
|
+
.object({
|
|
60
|
+
content: z.string().trim().min(1).max(16 * 1024).optional(),
|
|
61
|
+
reach: z.enum(['project', 'pattern']).optional(),
|
|
62
|
+
})
|
|
63
|
+
.strict();
|
|
64
|
+
/** `POST /proposals` body — one preference a person files from a skin (studio's takes). Strict: the
|
|
65
|
+
* kind, tier and capture marker are the daemon's, never the caller's. */
|
|
66
|
+
export const FileProposalSchema = z
|
|
67
|
+
.object({
|
|
68
|
+
content: z.string().trim().min(1).max(4000),
|
|
69
|
+
project: z.string().trim().min(1).max(128).optional(),
|
|
70
|
+
source: z.string().trim().min(1).max(256).optional(),
|
|
71
|
+
})
|
|
72
|
+
.strict();
|
|
73
|
+
/** Where a capture's materials land: a per-run inbox on the daemon host (the steering-author
|
|
74
|
+
* pattern — runs read the daemon's filesystem; only paths ride the problem statement). */
|
|
75
|
+
export function captureInboxDir(runId) {
|
|
76
|
+
if (process.env.WICKED_CAPTURE_INBOX_DIR)
|
|
77
|
+
return join(process.env.WICKED_CAPTURE_INBOX_DIR, runId);
|
|
78
|
+
const home = process.env.HOME ?? process.env.USERPROFILE ?? '/tmp';
|
|
79
|
+
return join(home, '.wicked', 'capture-inbox', runId);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* The capture inbox of each capture launch in flight, keyed by its run id. A worker's boundary is
|
|
83
|
+
* {sandbox, extraWriteRoots, ~/.claude/plugins} — even READS outside it are denied — so the run must
|
|
84
|
+
* declare its inbox as an extra root (the steering-author inbox does the same). `POST /runs` takes
|
|
85
|
+
* no roots from its body; it reads this in-process entry for the run id the capture route minted
|
|
86
|
+
* (a fresh UUID), so the root is never something a caller can ask for.
|
|
87
|
+
*/
|
|
88
|
+
export const captureLaunchRoots = new Map();
|
|
89
|
+
const BASE64 = /^[A-Za-z0-9+/]*={0,2}$/;
|
|
90
|
+
/** Caller names are display text, never paths: basename + charset scrub + an index prefix. */
|
|
91
|
+
function safeName(index, name, forceExt) {
|
|
92
|
+
let scrubbed = basename(name).replace(/[^a-zA-Z0-9._-]/g, '_');
|
|
93
|
+
if (forceExt !== undefined && !forceExt.includes(extname(scrubbed).toLowerCase())) {
|
|
94
|
+
scrubbed = `${scrubbed}${forceExt[0]}`;
|
|
95
|
+
}
|
|
96
|
+
return `${index}-${scrubbed}`;
|
|
97
|
+
}
|
|
98
|
+
/** The brief the capture run reads: the materials and the filing contract, in one file so the
|
|
99
|
+
* problem statement stays one short line. */
|
|
100
|
+
export function captureBrief(projectId, paths) {
|
|
101
|
+
const project = JSON.stringify({ project: projectId });
|
|
102
|
+
return [
|
|
103
|
+
`# Capture brief — project ${projectId}`,
|
|
104
|
+
'',
|
|
105
|
+
`The user dropped these materials on project ${projectId}. Read every one; an image needs a`,
|
|
106
|
+
'vision-capable read (open the file and look at it — a whiteboard photo is text and diagrams).',
|
|
107
|
+
'',
|
|
108
|
+
...paths.map((p) => `- ${p}`),
|
|
109
|
+
'',
|
|
110
|
+
"File what they contain as proposals for the user's review — nothing you file is used until",
|
|
111
|
+
'the user accepts it. One proposal per item, through the estate proposal tool (the wicked-garden',
|
|
112
|
+
"estate shim: `wicked-garden run scripts/_estate_client.py --readonly propose '<json>'`, or the",
|
|
113
|
+
'wicked-estate `proposal.submit` tool), with kind_type "memory" and:',
|
|
114
|
+
'',
|
|
115
|
+
`- an INTENT — work the user wants done next, one sentence someone could launch: payload {"content":"…","tier":"episodic","capture":"intent"}, facets ${project}`,
|
|
116
|
+
`- a DECISION — a choice that was made, and why: payload {"content":"…","tier":"semantic","capture":"decision"}, facets ${project}`,
|
|
117
|
+
`- a MEMORY — a durable fact or way of working: payload {"content":"…","tier":"semantic" or "procedural","capture":"memory"}, facets ${project}.`,
|
|
118
|
+
' If it is a general pattern that would help on ANY project, write it with no client names, people,',
|
|
119
|
+
' systems or data and add "reach":"pattern" to the payload — the user decides whether it crosses projects.',
|
|
120
|
+
`- a RULE the team must follow from now on: kind_type "policy:<architecture|development|security|testing|operations|compliance|design-ux>", payload {"rule":"…","severity":"info|warn|error|critical","capture":"rule"}, facets ${project}`,
|
|
121
|
+
'',
|
|
122
|
+
'File only what the materials say; never invent. Never include secrets, credentials or personal',
|
|
123
|
+
'data. Filing nothing is fine. Change no code and no file. Report what you filed.',
|
|
124
|
+
'',
|
|
125
|
+
].join('\n');
|
|
126
|
+
}
|
|
127
|
+
/** Validate and lay out the capture's materials, or name the first refusal (a 400). */
|
|
128
|
+
function materialsOf(body) {
|
|
129
|
+
const out = [];
|
|
130
|
+
let total = 0;
|
|
131
|
+
const notes = body.notes ?? '';
|
|
132
|
+
if (notes.trim() !== '') {
|
|
133
|
+
const bytes = Buffer.from(notes, 'utf8');
|
|
134
|
+
if (bytes.length > CAPTURE_NOTES_MAX_BYTES) {
|
|
135
|
+
return `notes is ${bytes.length} bytes, over the ${CAPTURE_NOTES_MAX_BYTES}-byte cap — drop a long transcript as a file`;
|
|
136
|
+
}
|
|
137
|
+
out.push({ file: safeName(out.length, 'notes.md'), bytes });
|
|
138
|
+
total += bytes.length;
|
|
139
|
+
}
|
|
140
|
+
for (const [i, f] of (body.files ?? []).entries()) {
|
|
141
|
+
let bytes;
|
|
142
|
+
let file;
|
|
143
|
+
if ('text' in f) {
|
|
144
|
+
bytes = Buffer.from(f.text, 'utf8');
|
|
145
|
+
if (bytes.length > CAPTURE_TEXT_MAX_BYTES) {
|
|
146
|
+
return `files[${i}] is ${bytes.length} bytes, over the ${CAPTURE_TEXT_MAX_BYTES}-byte per-file cap`;
|
|
147
|
+
}
|
|
148
|
+
file = safeName(out.length, f.name);
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const exts = CAPTURE_IMAGE_TYPES[f.mediaType];
|
|
152
|
+
if (exts === undefined) {
|
|
153
|
+
return `files[${i}]: mediaType ${JSON.stringify(f.mediaType)} is not one a vision seat reads — use one of ${Object.keys(CAPTURE_IMAGE_TYPES).join(', ')}`;
|
|
154
|
+
}
|
|
155
|
+
if (f.dataBase64.length % 4 !== 0 || !BASE64.test(f.dataBase64)) {
|
|
156
|
+
return `files[${i}]: dataBase64 is not base64`;
|
|
157
|
+
}
|
|
158
|
+
bytes = Buffer.from(f.dataBase64, 'base64');
|
|
159
|
+
if (bytes.length > CAPTURE_IMAGE_MAX_BYTES) {
|
|
160
|
+
return `files[${i}] is ${bytes.length} bytes, over the ${CAPTURE_IMAGE_MAX_BYTES}-byte per-image cap`;
|
|
161
|
+
}
|
|
162
|
+
file = safeName(out.length, f.name, exts);
|
|
163
|
+
}
|
|
164
|
+
if (bytes.length === 0)
|
|
165
|
+
return `files[${i}] is empty`;
|
|
166
|
+
total += bytes.length;
|
|
167
|
+
out.push({ file, bytes });
|
|
168
|
+
}
|
|
169
|
+
if (out.length === 0)
|
|
170
|
+
return 'a capture needs notes or at least one file';
|
|
171
|
+
if (total > CAPTURE_TOTAL_MAX_BYTES) {
|
|
172
|
+
return `the capture is ${total} bytes, over the ${CAPTURE_TOTAL_MAX_BYTES}-byte total cap`;
|
|
173
|
+
}
|
|
174
|
+
return out;
|
|
175
|
+
}
|
|
176
|
+
export function registerCaptureRoutes(app) {
|
|
177
|
+
app.post(`${V}/projects/:id/capture`, {
|
|
178
|
+
bodyLimit: CAPTURE_BODY_LIMIT,
|
|
179
|
+
config: {
|
|
180
|
+
manifest: {
|
|
181
|
+
requestType: 'CaptureBody',
|
|
182
|
+
responseType: 'CaptureResponse',
|
|
183
|
+
// Every non-201 besides the body 400s is POST /runs' own answer, passed through.
|
|
184
|
+
// 413: a body past CAPTURE_BODY_LIMIT, refused by the framework before the handler.
|
|
185
|
+
statusCodes: [201, 400, 404, 409, 413, 422, 501],
|
|
186
|
+
},
|
|
187
|
+
},
|
|
188
|
+
}, async (req, reply) => {
|
|
189
|
+
const parsed = CaptureSchema.safeParse(req.body ?? {});
|
|
190
|
+
if (!parsed.success) {
|
|
191
|
+
return reply.code(400).send({ error: 'Invalid capture body', details: parsed.error.issues });
|
|
192
|
+
}
|
|
193
|
+
const materials = materialsOf(parsed.data);
|
|
194
|
+
if (typeof materials === 'string')
|
|
195
|
+
return reply.code(400).send({ error: materials });
|
|
196
|
+
const projectId = req.params.id;
|
|
197
|
+
const runId = randomUUID();
|
|
198
|
+
const dir = captureInboxDir(runId);
|
|
199
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
200
|
+
const paths = [];
|
|
201
|
+
for (const m of materials) {
|
|
202
|
+
const target = join(dir, m.file);
|
|
203
|
+
await fsp.writeFile(target, m.bytes);
|
|
204
|
+
paths.push(target);
|
|
205
|
+
}
|
|
206
|
+
const briefPath = join(dir, 'CAPTURE.md');
|
|
207
|
+
await fsp.writeFile(briefPath, captureBrief(projectId, paths), 'utf8');
|
|
208
|
+
// The launch IS `POST /runs` — injected, so this route owns no second launch path.
|
|
209
|
+
const auth = req.headers.authorization;
|
|
210
|
+
captureLaunchRoots.set(runId, dir);
|
|
211
|
+
const launched = await app.inject({
|
|
212
|
+
method: 'POST',
|
|
213
|
+
url: `${V}/runs`,
|
|
214
|
+
headers: { 'content-type': 'application/json', ...(auth !== undefined ? { authorization: auth } : {}) },
|
|
215
|
+
payload: {
|
|
216
|
+
problem: `Capture for project ${projectId}: follow the capture brief at ${briefPath} — read every material it lists and file what they contain as proposals for the user's review. Change no code and no file.`,
|
|
217
|
+
sessionId: runId,
|
|
218
|
+
projectId,
|
|
219
|
+
plan: { steps: [{ catalog: 'understand', id: 'capture' }] },
|
|
220
|
+
deliver: 'none',
|
|
221
|
+
},
|
|
222
|
+
}).finally(() => captureLaunchRoots.delete(runId));
|
|
223
|
+
if (launched.statusCode !== 201) {
|
|
224
|
+
await fsp.rm(dir, { recursive: true, force: true });
|
|
225
|
+
return reply.code(launched.statusCode).type('application/json').send(launched.body);
|
|
226
|
+
}
|
|
227
|
+
return reply.code(201).send({ runId });
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Accept a pending MEMORY proposal WITH an edit — submit the edited copy, approve the copy, then
|
|
232
|
+
* reject the original — and return the copy's approve outcome plus `edited: {from, to}`. The
|
|
233
|
+
* original stays pending until the copy is approved, so a failed approve loses nothing (the copy is
|
|
234
|
+
* withdrawn, so a retry leaves no duplicate pending); a reject
|
|
235
|
+
* that fails AFTER the approve answers 200 with `edited.originalPending: true` (the edit landed;
|
|
236
|
+
* the original is still in the queue for the person to reject), never a 502 inviting a retry that
|
|
237
|
+
* would promote a second copy. A
|
|
238
|
+
* `reach: "pattern"` copy drops the `project` and `repo` facets (it may now be recalled on any
|
|
239
|
+
* project); it is refused on anything but a captured memory (`payload.capture: "memory"`) — a
|
|
240
|
+
* decision or an intent is always the project's, and a memory no capture filed is not this verb's. A
|
|
241
|
+
* `reach: "project"` row keeps (or, when the worker filed none, gains) the project facet — the
|
|
242
|
+
* capture run's project, read from `projectOf(provenance.run_id)`. When nothing changes, the
|
|
243
|
+
* original is approved as filed (no copy).
|
|
244
|
+
*/
|
|
245
|
+
export async function approveEdited(estateTool, id, edit, projectOf) {
|
|
246
|
+
// estate has no compare-and-swap: two accepts of one proposal racing (a double click, two tabs)
|
|
247
|
+
// would each promote a copy. One daemon, so one accept per proposal at a time is enough.
|
|
248
|
+
if (editsInFlight.has(id)) {
|
|
249
|
+
return { status: 409, body: { error: `proposal ${id} is already being accepted` } };
|
|
250
|
+
}
|
|
251
|
+
editsInFlight.add(id);
|
|
252
|
+
try {
|
|
253
|
+
return await acceptEdited(estateTool, id, edit, projectOf);
|
|
254
|
+
}
|
|
255
|
+
finally {
|
|
256
|
+
editsInFlight.delete(id);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
/** The proposal ids with an accept-with-edit in flight (see {@link approveEdited}). */
|
|
260
|
+
const editsInFlight = new Set();
|
|
261
|
+
/** A plain approve or a reject of a proposal whose accept-with-edit is in flight is refused (409):
|
|
262
|
+
* it would decide the original while the edit is promoting its copy. */
|
|
263
|
+
export function editInFlight(id) {
|
|
264
|
+
return editsInFlight.has(id);
|
|
265
|
+
}
|
|
266
|
+
async function acceptEdited(estateTool, id, edit, projectOf) {
|
|
267
|
+
const listed = (await estateTool('proposal.list', { state: 'pending' }));
|
|
268
|
+
const row = (listed.proposals ?? []).find((p) => p.id === id);
|
|
269
|
+
if (row === undefined)
|
|
270
|
+
return { status: 404, body: { error: `no pending proposal ${id}` } };
|
|
271
|
+
if (row.kind_type !== 'memory') {
|
|
272
|
+
return {
|
|
273
|
+
status: 400,
|
|
274
|
+
body: { error: `only a memory proposal can be accepted with an edit (this is ${row.kind_type}); accept or reject it as filed` },
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
const payload = { ...(typeof row.payload === 'object' && row.payload !== null ? row.payload : {}) };
|
|
278
|
+
const capture = payload['capture'];
|
|
279
|
+
if (edit.reach === 'pattern' && capture !== 'memory') {
|
|
280
|
+
const what = typeof capture === 'string' ? `a ${capture}` : 'a proposal that is not a captured memory';
|
|
281
|
+
return { status: 400, body: { error: `${what} stays with its project — only a captured memory can cross projects` } };
|
|
282
|
+
}
|
|
283
|
+
const facets = { ...row.facets };
|
|
284
|
+
if (edit.reach === 'pattern') {
|
|
285
|
+
delete facets['project'];
|
|
286
|
+
delete facets['repo'];
|
|
287
|
+
}
|
|
288
|
+
else if (edit.reach === 'project' && facets['project'] === undefined) {
|
|
289
|
+
const runId = row.provenance?.['run_id'];
|
|
290
|
+
const project = runId === undefined ? undefined : projectOf(runId);
|
|
291
|
+
if (project === undefined) {
|
|
292
|
+
return { status: 400, body: { error: `proposal ${id} names no project to keep it in, and no project files the run that proposed it` } };
|
|
293
|
+
}
|
|
294
|
+
facets['project'] = project;
|
|
295
|
+
}
|
|
296
|
+
const sameFacets = Object.keys(facets).length === Object.keys(row.facets).length &&
|
|
297
|
+
Object.entries(facets).every(([k, v]) => row.facets[k] === v);
|
|
298
|
+
if ((edit.content === undefined || edit.content === payload['content']) && sameFacets) {
|
|
299
|
+
// Nothing the store keeps would change: approve the original as filed.
|
|
300
|
+
return { status: 200, body: (await estateTool('proposal.approve', { id })) };
|
|
301
|
+
}
|
|
302
|
+
if (edit.content !== undefined)
|
|
303
|
+
payload['content'] = edit.content;
|
|
304
|
+
if (edit.reach !== undefined)
|
|
305
|
+
payload['reach'] = edit.reach;
|
|
306
|
+
payload['edited_from'] = id;
|
|
307
|
+
const submitted = (await estateTool('proposal.submit', { kind_type: 'memory', payload, facets }));
|
|
308
|
+
if (typeof submitted.id !== 'string' || submitted.id === '') {
|
|
309
|
+
throw new Error('proposal.submit returned no id for the edited copy');
|
|
310
|
+
}
|
|
311
|
+
const copy = submitted.id;
|
|
312
|
+
let approved;
|
|
313
|
+
try {
|
|
314
|
+
approved = (await estateTool('proposal.approve', { id: copy }));
|
|
315
|
+
}
|
|
316
|
+
catch (err) {
|
|
317
|
+
// Withdraw the copy so a retry of this accept leaves no stray duplicate pending in review.
|
|
318
|
+
await estateTool('proposal.reject', { id: copy }).catch(() => undefined);
|
|
319
|
+
throw err;
|
|
320
|
+
}
|
|
321
|
+
const edited = { from: id, to: copy };
|
|
322
|
+
try {
|
|
323
|
+
await estateTool('proposal.reject', { id });
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
edited['originalPending'] = true;
|
|
327
|
+
}
|
|
328
|
+
return { status: 200, body: { ...approved, edited } };
|
|
329
|
+
}
|
|
330
|
+
//# sourceMappingURL=capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture.js","sourceRoot":"","sources":["../../src/api/capture.ts"],"names":[],"mappings":"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"}
|