opencode-wait-a-minute 0.0.0-stage → 1.1.0-rc.8

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.
Files changed (207) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +318 -2
  3. package/index.js +1836 -0
  4. package/package.json +70 -4
  5. package/skills/codebase-design/SKILL.md +114 -0
  6. package/skills/design-contract/SKILL.md +27 -0
  7. package/skills/design-critique/SKILL.md +19 -0
  8. package/skills/design-system/SKILL.md +17 -0
  9. package/skills/design-system/references/image-analysis.md +14 -0
  10. package/skills/design-system/references/tokens.md +32 -0
  11. package/skills/design-system/references/ui-rules.md +14 -0
  12. package/skills/diagnosing-bugs/SKILL.md +138 -0
  13. package/skills/frontend-design/SKILL.md +36 -0
  14. package/skills/handoff/SKILL.md +16 -0
  15. package/skills/improve-codebase-architecture/SKILL.md +71 -0
  16. package/skills/linter-negative/SKILL.md +74 -0
  17. package/skills/no-slop-ui/SKILL.md +26 -0
  18. package/skills/prototype/SKILL.md +26 -0
  19. package/skills/registry.json +44087 -0
  20. package/skills/tastemaker/SKILL.md +8 -0
  21. package/skills/tastemaker/references/tastemaker.md +14 -0
  22. package/skills/tdd/SKILL.md +38 -0
  23. package/skills/visual-review/SKILL.md +103 -0
  24. package/skills/visual-review/references/review-gates.md +42 -0
  25. package/skills/visual-review/references/surface-archetypes.md +37 -0
  26. package/skills/wizard/SKILL.md +44 -0
  27. package/skills/writing-for-agents/SKILL.md +81 -0
  28. package/src/cognition/cognition-store.js +251 -0
  29. package/src/cognition/cognitive-state.js +126 -0
  30. package/src/cognition/hypothesis-manager.js +113 -0
  31. package/src/cognition/observation-engine.js +112 -0
  32. package/src/cognition/observation-provenance.js +268 -0
  33. package/src/context/active-context-boundary.js +68 -0
  34. package/src/context/assembly.js +494 -0
  35. package/src/context/assessment-rules.js +55 -0
  36. package/src/context/capsule-staleness.js +267 -0
  37. package/src/context/capsules.js +2 -0
  38. package/src/context/compare-array.js +98 -0
  39. package/src/context/compare-object.js +89 -0
  40. package/src/context/compare-values.js +42 -0
  41. package/src/context/context-assembly-contract.js +71 -0
  42. package/src/context/context-budget-manager.js +232 -0
  43. package/src/context/context-builder.js +49 -0
  44. package/src/context/context-cache.js +55 -0
  45. package/src/context/context-capture.js +243 -0
  46. package/src/context/context-classification.js +199 -0
  47. package/src/context/context-compaction.js +179 -0
  48. package/src/context/context-decision-audit.js +267 -0
  49. package/src/context/context-demotion.js +173 -0
  50. package/src/context/context-dictionary.js +106 -0
  51. package/src/context/context-drift-detection.js +225 -0
  52. package/src/context/context-evaluation.js +374 -0
  53. package/src/context/context-event-ingress.js +100 -0
  54. package/src/context/context-event-normalization.js +224 -0
  55. package/src/context/context-feedback-loop.js +216 -0
  56. package/src/context/context-freshness.js +21 -0
  57. package/src/context/context-graph-builder.js +71 -0
  58. package/src/context/context-graph.js +451 -0
  59. package/src/context/context-history-relevance.js +321 -0
  60. package/src/context/context-interception.js +145 -0
  61. package/src/context/context-invalidation-events.js +154 -0
  62. package/src/context/context-lifecycle.js +170 -0
  63. package/src/context/context-loop-prevention.js +347 -0
  64. package/src/context/context-manager.js +340 -0
  65. package/src/context/context-memory-layers.js +265 -0
  66. package/src/context/context-minimality.js +166 -0
  67. package/src/context/context-normalization.js +130 -0
  68. package/src/context/context-optimization-metrics.js +434 -0
  69. package/src/context/context-output-policy.js +135 -0
  70. package/src/context/context-pack-authority.js +157 -0
  71. package/src/context/context-promotion.js +172 -0
  72. package/src/context/context-query-contract.js +101 -0
  73. package/src/context/context-ranking.js +164 -0
  74. package/src/context/context-rate-distortion.js +261 -0
  75. package/src/context/context-recovery.js +209 -0
  76. package/src/context/context-retrieval-integration.js +60 -0
  77. package/src/context/context-retrieval.js +93 -0
  78. package/src/context/context-router.js +457 -0
  79. package/src/context/context-routing-evaluation.js +331 -0
  80. package/src/context/context-routing-observability.js +296 -0
  81. package/src/context/context-routing-shadow.js +237 -0
  82. package/src/context/context-scope.js +181 -0
  83. package/src/context/context-snapshot.js +226 -0
  84. package/src/context/context-source-registry.js +95 -0
  85. package/src/context/context-sufficiency-gate.js +120 -0
  86. package/src/context/context-sufficiency-oracle.js +167 -0
  87. package/src/context/context-telemetry.js +176 -0
  88. package/src/context/context.js +633 -0
  89. package/src/context/dependency-closure.js +246 -0
  90. package/src/context/page-fault-tracker.js +275 -0
  91. package/src/context/prompt-engine.js +74 -0
  92. package/src/context/runtime-context-graph.js +260 -0
  93. package/src/context/selection.js +2 -0
  94. package/src/context/session.js +2 -0
  95. package/src/context/sufficiency-contract.js +300 -0
  96. package/src/context/tokenizer.js +17 -0
  97. package/src/context-benchmark-router.mjs +125 -0
  98. package/src/evidence/evidence-engine.js +161 -0
  99. package/src/evidence/evidence-factory.js +3 -0
  100. package/src/evidence/evidence-freshness.js +463 -0
  101. package/src/evidence/evidence-gap.js +76 -0
  102. package/src/evidence/evidence-lineage.js +525 -0
  103. package/src/evidence/evidence.js +136 -0
  104. package/src/evidence/freshness-validation.js +187 -0
  105. package/src/evidence/lineage.js +4 -0
  106. package/src/execution/action-evaluation.js +179 -0
  107. package/src/execution/circuit-breaker.js +70 -0
  108. package/src/execution/claim-interception.js +63 -0
  109. package/src/execution/execution-engine.js +258 -0
  110. package/src/execution/execution-intent.js +69 -0
  111. package/src/execution/execution-state.js +89 -0
  112. package/src/execution/formatting.js +60 -0
  113. package/src/execution/l1-sanitize.js +16 -0
  114. package/src/execution/l2-resource-guards.js +19 -0
  115. package/src/execution/l3-invariant-checker.js +5 -0
  116. package/src/execution/l4-containment.js +6 -0
  117. package/src/execution/runtime-guards.js +106 -0
  118. package/src/execution/strategy-identity.js +162 -0
  119. package/src/execution/tool-interceptor.js +7 -0
  120. package/src/execution/tool-result-classifier.js +63 -0
  121. package/src/integration/canary-deploy.js +143 -0
  122. package/src/integration/collector.js +59 -0
  123. package/src/integration/error-recovery.js +6 -0
  124. package/src/integration/event-bus.js +66 -0
  125. package/src/integration/health-checker.js +57 -0
  126. package/src/integration/logger.js +39 -0
  127. package/src/integration/message-handler.js +611 -0
  128. package/src/integration/opencode-db.js +153 -0
  129. package/src/integration/orchestration.js +419 -0
  130. package/src/integration/part-provenance.js +65 -0
  131. package/src/integration/rate-limiter.js +55 -0
  132. package/src/integration/release-gate.js +336 -0
  133. package/src/integration/rollback-manager.js +164 -0
  134. package/src/integration/router-adapter.js +269 -0
  135. package/src/integration/telemetry.js +45 -0
  136. package/src/integration/update-checker.js +10 -0
  137. package/src/persistence/event-sourcing.js +75 -0
  138. package/src/persistence/memory.js +501 -0
  139. package/src/persistence/migration-runner.js +16 -0
  140. package/src/persistence/persistence-manager.js +39 -0
  141. package/src/persistence/transaction-log.js +157 -0
  142. package/src/policy/action-capabilities.js +116 -0
  143. package/src/policy/action-policy.js +4 -0
  144. package/src/policy/assessment-engine.js +104 -0
  145. package/src/policy/assumption-tracking.js +66 -0
  146. package/src/policy/budget-enforcer.js +7 -0
  147. package/src/policy/config-validator.js +102 -0
  148. package/src/policy/execution-assessment.js +142 -0
  149. package/src/policy/failure-classification.js +5 -0
  150. package/src/policy/feature-flags.js +65 -0
  151. package/src/policy/governance-enforcement.js +118 -0
  152. package/src/policy/locale.js +15 -0
  153. package/src/policy/multi-signer.js +151 -0
  154. package/src/policy/policy-state-machine.js +97 -0
  155. package/src/policy/ponytail-constraint.js +38 -0
  156. package/src/policy/project-inspector.js +93 -0
  157. package/src/policy/query-builder.js +14 -0
  158. package/src/policy/request-classifier.js +79 -0
  159. package/src/policy/risk-engine.js +266 -0
  160. package/src/policy/scope-enforcement.js +140 -0
  161. package/src/policy/secret-scanner.js +68 -0
  162. package/src/policy/skill-routing.js +104 -0
  163. package/src/policy/strategy-capabilities.js +211 -0
  164. package/src/policy/strategy.js +6 -0
  165. package/src/policy/uncertainty.js +117 -0
  166. package/src/shared/container.js +44 -0
  167. package/src/shared/decision-types.js +24 -0
  168. package/src/shared/simple-test.js +160 -0
  169. package/src/shared/wam-events.js +52 -0
  170. package/src/skills/engine.js +1705 -0
  171. package/src/skills/skill-registry.js +19 -0
  172. package/src/skills/skill-routing.js +340 -0
  173. package/src/state/lifecycle-manager.js +113 -0
  174. package/src/state/operational-state.js +198 -0
  175. package/src/state/projections.js +47 -0
  176. package/src/state/replay-engine.js +5 -0
  177. package/src/state/requirement-ownership.js +20 -0
  178. package/src/state/requirement-state.js +152 -0
  179. package/src/state/run-event-identity.js +172 -0
  180. package/src/state/state-engine.js +19 -0
  181. package/src/state/state-machine.js +119 -0
  182. package/src/state/state-schema.js +318 -0
  183. package/src/state/state-store.js +335 -0
  184. package/src/state/state-transition.js +84 -0
  185. package/src/state/task-dependencies.js +287 -0
  186. package/src/state/task-execution.js +217 -0
  187. package/src/state/task-lifecycle.js +59 -0
  188. package/src/state/task-runs.js +361 -0
  189. package/src/state/task-state-file.js +86 -0
  190. package/src/state/task-state.js +41 -0
  191. package/src/state/task-status.js +54 -0
  192. package/src/state/task-store.js +48 -0
  193. package/src/state/wam-state.js +148 -0
  194. package/src/verification/completion-gate-simple.js +8 -0
  195. package/src/verification/completion-gate.js +183 -0
  196. package/src/verification/contract.js +9 -0
  197. package/src/verification/contradiction-resolution.js +255 -0
  198. package/src/verification/diagnostic-engine.js +659 -0
  199. package/src/verification/false-completion-prevention.js +100 -0
  200. package/src/verification/hook-validator.js +6 -0
  201. package/src/verification/requirements.js +6 -0
  202. package/src/verification/verification-context.js +162 -0
  203. package/src/verification/verification-lifecycle.js +66 -0
  204. package/src/verification/verification-model.js +89 -0
  205. package/src/verification/verification-persistence.js +129 -0
  206. package/src/verification/verification-policy.js +127 -0
  207. package/src/verification/verification.js +415 -0
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Real Context Router Selector for Benchmark
3
+ * Bridges benchmark scenarios to the canonical WAM Context Router.
4
+ */
5
+
6
+ import { ContextGraph, NODE_TYPES, EDGE_TYPES } from "./context/context-graph.js";
7
+ import { resolveContext } from "./context/context-router.js";
8
+ import { estimateTokens } from "./context/context-optimization-metrics.js";
9
+
10
+ /**
11
+ * Build a ContextGraph instance from a benchmark scenario object.
12
+ */
13
+ export function buildBenchmarkGraph(scenario) {
14
+ const graph = new ContextGraph();
15
+
16
+ // Add all scenario nodes
17
+ if (scenario.nodes) {
18
+ for (const [id, node] of Object.entries(scenario.nodes)) {
19
+ graph.addNode({
20
+ id,
21
+ type: node.type && NODE_TYPES.includes(node.type) ? node.type : "requirement",
22
+ content: node.content || "",
23
+ metadata: {
24
+ freshness: node.freshness ?? 1.0,
25
+ importance: node.importance ?? 1.0,
26
+ aliases: node.aliases || [],
27
+ admission: node.admission || "CONDITIONAL",
28
+ ...node.metadata
29
+ }
30
+ });
31
+ }
32
+ }
33
+
34
+ // Add explicit requires edges if provided.
35
+ // Change 04: Do not derive additional edges from requiredIds when explicit graph is provided.
36
+ const addedEdges = new Set();
37
+ const hasExplicitGraph = Array.isArray(scenario.requires);
38
+
39
+ if (hasExplicitGraph) {
40
+ for (const req of scenario.requires) {
41
+ const requested = req.type || "requires";
42
+ const type = EDGE_TYPES.includes(requested)
43
+ ? requested
44
+ : requested === "requires"
45
+ ? "requires_completion"
46
+ : "related_to";
47
+ const key = `${req.from}->${req.to}:${type}`;
48
+ if (!addedEdges.has(key)) {
49
+ addedEdges.add(key);
50
+ graph.addEdge({
51
+ from: req.from,
52
+ to: req.to,
53
+ type,
54
+ weight: req.weight ?? 1.0
55
+ });
56
+ }
57
+ }
58
+ } else if (scenario.requiredIds) {
59
+ // Legacy synthetic graph derived from requiredIds
60
+ const taskId = scenario.taskId || "task";
61
+ for (const reqId of scenario.requiredIds) {
62
+ const key = `${taskId}->${reqId}:requires_completion`;
63
+ if (!addedEdges.has(key) && graph.getNode(reqId) && graph.getNode(taskId)) {
64
+ addedEdges.add(key);
65
+ graph.addEdge({
66
+ from: taskId,
67
+ to: reqId,
68
+ type: "requires_completion",
69
+ weight: 1.0
70
+ });
71
+ }
72
+ }
73
+ }
74
+
75
+ // Attach metadata tag indicating synthetic vs explicit ground truth (Change 04)
76
+ graph.metadata = {
77
+ syntheticGroundTruth: !hasExplicitGraph
78
+ };
79
+
80
+ return graph;
81
+ }
82
+
83
+ /**
84
+ * WAM Router selector function conforming to benchmark selector signature.
85
+ * @param {Object} [options]
86
+ * @param {number} [options.budget=4000]
87
+ */
88
+ export function wamRouterSelector(options = {}) {
89
+ const tokenBudget = options.budget ?? 4000;
90
+ return function select(scenario) {
91
+ const graph = buildBenchmarkGraph(scenario);
92
+ const taskId = scenario.taskId && graph.getNode(scenario.taskId) ? scenario.taskId : (graph.getNode("task") ? "task" : (scenario.taskId || graph.nodes.values().next().value?.id || "task"));
93
+
94
+ let result;
95
+ try {
96
+ result = resolveContext(graph, { taskId, maxTokens: tokenBudget });
97
+ } catch (e) {
98
+ // Router error: the selection algorithm could not execute.
99
+ // This is distinct from a page fault (where the selected context
100
+ // was insufficient and the system recovered additional context).
101
+ const serializedError = {
102
+ name: e?.name ?? "Error",
103
+ message: e?.message ?? String(e),
104
+ stack: e?.stack ?? null
105
+ };
106
+ return {
107
+ status: "ERROR",
108
+ errorType: "ROUTER_ERROR",
109
+ error: serializedError
110
+ };
111
+ }
112
+
113
+ const selectedIds = (result.nodes || []).map(n => n.id);
114
+ const usedIds = selectedIds; // Router-selected nodes are used
115
+
116
+ return {
117
+ status: "OK",
118
+ selectedIds,
119
+ usedIds: undefined, // Change 05: Do not infer usedIds from selectedIds
120
+ pageFaults: result.sufficient ? 0 : 1,
121
+ reacquiredTokens: 0,
122
+ routerResult: result
123
+ };
124
+ };
125
+ }
@@ -0,0 +1,161 @@
1
+ /**
2
+ * Evidence Engine — produces validated evidence from observation + assessment.
3
+ *
4
+ * Decoupled from execution-engine: builds evidence records via the
5
+ * evidence-lineage store, then routes them to the lineage graph when
6
+ * the observation carries a requirement binding.
7
+ *
8
+ * Evidence is what proves a hypothesis. An evidence record must:
9
+ * 1. Be created from a concrete observation (or explicit content).
10
+ * 2. Carry provenance (hypothesisId, source).
11
+ * 3. Optionally link to a requirement when the execution was targeted.
12
+ *
13
+ * Does NOT own: hypothesis status transitions (state-machine.js) or
14
+ * observation persistence (observation-engine.js).
15
+ */
16
+
17
+ import { createEvidence, linkEvidenceToRequirement } from "./evidence-lineage.js";
18
+
19
+ /**
20
+ * Default evidence type for execution-engine outputs.
21
+ */
22
+ export const EVIDENCE_TYPE_TOOL_OUTPUT = "TOOL_OUTPUT";
23
+ export const EVIDENCE_SOURCE_EXECUTION = "execution-engine";
24
+
25
+ /**
26
+ * Pure content serializer — turns a tool result into a stable string content.
27
+ * Centralized so evidence content shape stays consistent.
28
+ *
29
+ * @param {*} result
30
+ * @returns {string}
31
+ */
32
+ export function serializeEvidenceContent(result) {
33
+ if (result === undefined || result === null) return "ok";
34
+ if (typeof result === "string") return result;
35
+ try {
36
+ return JSON.stringify(result);
37
+ } catch {
38
+ return String(result);
39
+ }
40
+ }
41
+
42
+ /**
43
+ * Resolve a requirementId from a possibly-incomplete requirement object
44
+ * or a pre-resolved id. Returns the id only when it is a non-empty string;
45
+ * otherwise returns undefined (evidence stays unbound).
46
+ *
47
+ * @param {object} [args]
48
+ * @param {object} [args.requirement] - requirement object; may be incomplete
49
+ * @param {string} [args.requirementId] - pre-resolved id (may be undefined)
50
+ * @returns {string|undefined}
51
+ */
52
+ export function resolveRequirementId({ requirement, requirementId } = {}) {
53
+ if (requirement && typeof requirement === "object" && typeof requirement.id === "string" && requirement.id.length > 0) {
54
+ return requirement.id;
55
+ }
56
+ if (typeof requirementId === "string" && requirementId.length > 0) {
57
+ return requirementId;
58
+ }
59
+ return undefined;
60
+ }
61
+
62
+ /**
63
+ * Build the evidence payload from a successful observation.
64
+ * Pure: no I/O, no lineage graph mutation.
65
+ *
66
+ * @param {object} args
67
+ * @param {string} [args.requirementId] - pre-resolved id; ignored if invalid
68
+ * @param {object} [args.requirement] - requirement object; only used when .id is a non-empty string
69
+ * @param {*} args.result - tool output (string|object|primitive)
70
+ * @param {string} [args.type] - evidence type (default TOOL_OUTPUT)
71
+ * @param {string} [args.source] - source identifier (default execution-engine)
72
+ * @param {string} args.hypothesisId
73
+ * @returns {object} payload ready for createEvidence
74
+ */
75
+ export function buildEvidencePayload({
76
+ requirement,
77
+ requirementId,
78
+ result,
79
+ type = EVIDENCE_TYPE_TOOL_OUTPUT,
80
+ source = EVIDENCE_SOURCE_EXECUTION,
81
+ hypothesisId,
82
+ }) {
83
+ const resolvedId = resolveRequirementId({ requirement, requirementId });
84
+ return {
85
+ requirementId: resolvedId,
86
+ content: serializeEvidenceContent(result),
87
+ type,
88
+ source,
89
+ hypothesisId,
90
+ };
91
+ }
92
+
93
+ /**
94
+ * Create evidence from a successful tool observation.
95
+ * Pure wrapper around evidence-lineage: returns the evidence record.
96
+ *
97
+ * @param {string} taskId
98
+ * @param {object} payload - see buildEvidencePayload
99
+ * @param {string} root
100
+ * @returns {object} created evidence record
101
+ */
102
+ export function createExecutionEvidence(taskId, payload, root) {
103
+ return createEvidence(taskId, payload, root);
104
+ }
105
+
106
+ /**
107
+ * Link evidence into the lineage graph once the observation has been recorded.
108
+ * Requires both observationId and requirementId; otherwise this is a no-op
109
+ * (unbound evidence — the hypothesis chain still references it via facts).
110
+ *
111
+ * @param {object} args
112
+ * @param {string} args.evidenceId
113
+ * @param {string} args.requirementId
114
+ * @param {string} args.hypothesisId
115
+ * @param {string|null} args.experimentId
116
+ * @param {string|null} args.observationId
117
+ * @param {string} args.taskId
118
+ * @param {string} args.taskRoot
119
+ * @returns {boolean} true when the lineage was linked; false when skipped.
120
+ */
121
+ export function linkEvidenceIfBound({
122
+ evidenceId,
123
+ requirementId,
124
+ hypothesisId,
125
+ experimentId,
126
+ observationId,
127
+ taskId,
128
+ taskRoot,
129
+ }) {
130
+ if (!evidenceId || !requirementId || !observationId) return false;
131
+ linkEvidenceToRequirement(
132
+ evidenceId,
133
+ requirementId,
134
+ hypothesisId,
135
+ experimentId ?? null,
136
+ observationId,
137
+ taskId,
138
+ taskRoot,
139
+ );
140
+ return true;
141
+ }
142
+
143
+ /**
144
+ * Full success-path: build → create → (later) link.
145
+ * Returns the evidence record so the caller can carry its id into the
146
+ * observation's facts list.
147
+ *
148
+ * Safely resolves requirement binding: when args.requirement is incomplete
149
+ * or args.requirementId is not a non-empty string, the produced evidence
150
+ * stays unbound (no requirement.id access, no lineage link).
151
+ *
152
+ * @param {string} taskId
153
+ * @param {string} taskRoot
154
+ * @param {object} args - see buildEvidencePayload
155
+ * @returns {{evidence: object, payload: object}}
156
+ */
157
+ export function produceExecutionEvidence(taskId, taskRoot, args) {
158
+ const payload = buildEvidencePayload(args);
159
+ const evidence = createExecutionEvidence(taskId, payload, taskRoot);
160
+ return { evidence, payload };
161
+ }
@@ -0,0 +1,3 @@
1
+ export function createEvidence(type, content, source) {
2
+ return { id: "ev-" + Date.now(), type, content, source, createdAt: Date.now() };
3
+ }