@workflow-cannon/workspace-kit 0.18.0 → 0.24.0

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 (140) hide show
  1. package/README.md +23 -9
  2. package/dist/cli/doctor-planning-issues.js +3 -22
  3. package/dist/cli/run-command.js +22 -38
  4. package/dist/cli.js +95 -4
  5. package/dist/contracts/command-manifest.d.ts +17 -0
  6. package/dist/contracts/command-manifest.js +1 -0
  7. package/dist/contracts/index.d.ts +1 -1
  8. package/dist/contracts/module-contract.d.ts +12 -11
  9. package/dist/core/agent-instruction-surface.d.ts +33 -0
  10. package/dist/core/agent-instruction-surface.js +46 -0
  11. package/dist/core/config-cli.js +13 -17
  12. package/dist/core/config-metadata.js +61 -2
  13. package/dist/core/index.d.ts +4 -1
  14. package/dist/core/index.js +3 -0
  15. package/dist/core/module-command-router.js +19 -1
  16. package/dist/core/module-registry-resolve.d.ts +27 -0
  17. package/dist/core/module-registry-resolve.js +91 -0
  18. package/dist/core/module-registry.d.ts +14 -0
  19. package/dist/core/module-registry.js +57 -0
  20. package/dist/core/planning/build-plan-session-file.d.ts +29 -0
  21. package/dist/core/planning/build-plan-session-file.js +58 -0
  22. package/dist/core/planning/index.d.ts +17 -0
  23. package/dist/core/planning/index.js +15 -0
  24. package/dist/core/policy.js +18 -8
  25. package/dist/core/state/unified-state-db.d.ts +21 -0
  26. package/dist/core/state/unified-state-db.js +80 -0
  27. package/dist/core/workspace-kit-config.js +8 -0
  28. package/dist/modules/agent-behavior/builtins.d.ts +3 -0
  29. package/dist/modules/agent-behavior/builtins.js +71 -0
  30. package/dist/modules/agent-behavior/explain.d.ts +6 -0
  31. package/dist/modules/agent-behavior/explain.js +46 -0
  32. package/dist/modules/agent-behavior/index.d.ts +4 -0
  33. package/dist/modules/agent-behavior/index.js +461 -0
  34. package/dist/modules/agent-behavior/interview-session-file.d.ts +9 -0
  35. package/dist/modules/agent-behavior/interview-session-file.js +43 -0
  36. package/dist/modules/agent-behavior/interview.d.ts +13 -0
  37. package/dist/modules/agent-behavior/interview.js +88 -0
  38. package/dist/modules/agent-behavior/persistence.d.ts +6 -0
  39. package/dist/modules/agent-behavior/persistence.js +89 -0
  40. package/dist/modules/agent-behavior/store.d.ts +34 -0
  41. package/dist/modules/agent-behavior/store.js +119 -0
  42. package/dist/modules/agent-behavior/types.d.ts +28 -0
  43. package/dist/modules/agent-behavior/types.js +1 -0
  44. package/dist/modules/agent-behavior/validate.d.ts +11 -0
  45. package/dist/modules/agent-behavior/validate.js +123 -0
  46. package/dist/modules/approvals/index.js +54 -51
  47. package/dist/modules/approvals/policy-sensitive-commands.d.ts +4 -0
  48. package/dist/modules/approvals/policy-sensitive-commands.js +4 -0
  49. package/dist/modules/approvals/review-runtime.js +1 -2
  50. package/dist/modules/documentation/index.js +47 -45
  51. package/dist/modules/documentation/normalizer.d.ts +3 -0
  52. package/dist/modules/documentation/normalizer.js +171 -0
  53. package/dist/modules/documentation/parser.d.ts +7 -0
  54. package/dist/modules/documentation/parser.js +39 -0
  55. package/dist/modules/documentation/policy-sensitive-commands.d.ts +5 -0
  56. package/dist/modules/documentation/policy-sensitive-commands.js +8 -0
  57. package/dist/modules/documentation/renderer.d.ts +23 -0
  58. package/dist/modules/documentation/renderer.js +105 -0
  59. package/dist/modules/documentation/runtime-batch.d.ts +10 -0
  60. package/dist/modules/documentation/runtime-batch.js +67 -0
  61. package/dist/modules/documentation/runtime-config.d.ts +11 -0
  62. package/dist/modules/documentation/runtime-config.js +54 -0
  63. package/dist/modules/documentation/runtime-render-support.d.ts +8 -0
  64. package/dist/modules/documentation/runtime-render-support.js +36 -0
  65. package/dist/modules/documentation/runtime.js +22 -510
  66. package/dist/modules/documentation/types.d.ts +182 -0
  67. package/dist/modules/documentation/validator.d.ts +8 -0
  68. package/dist/modules/documentation/validator.js +234 -0
  69. package/dist/modules/documentation/view-models.d.ts +3 -0
  70. package/dist/modules/documentation/view-models.js +124 -0
  71. package/dist/modules/improvement/generate-recommendations-runtime.js +3 -3
  72. package/dist/modules/improvement/improvement-state.d.ts +2 -2
  73. package/dist/modules/improvement/improvement-state.js +52 -23
  74. package/dist/modules/improvement/index.js +140 -138
  75. package/dist/modules/improvement/ingest.d.ts +1 -1
  76. package/dist/modules/improvement/policy-sensitive-commands.d.ts +4 -0
  77. package/dist/modules/improvement/policy-sensitive-commands.js +7 -0
  78. package/dist/modules/index.d.ts +6 -0
  79. package/dist/modules/index.js +17 -0
  80. package/dist/modules/planning/index.js +384 -50
  81. package/dist/modules/planning/question-engine.d.ts +2 -0
  82. package/dist/modules/planning/question-engine.js +8 -1
  83. package/dist/modules/task-engine/doctor-planning-persistence.js +21 -13
  84. package/dist/modules/task-engine/index.d.ts +1 -2
  85. package/dist/modules/task-engine/index.js +1 -1143
  86. package/dist/modules/task-engine/migrate-task-persistence-runtime.js +31 -4
  87. package/dist/modules/task-engine/migrate-wishlist-intake-runtime.d.ts +2 -0
  88. package/dist/modules/task-engine/migrate-wishlist-intake-runtime.js +146 -0
  89. package/dist/modules/task-engine/planning-open.d.ts +2 -9
  90. package/dist/modules/task-engine/planning-open.js +4 -15
  91. package/dist/modules/task-engine/policy-sensitive-commands.d.ts +5 -0
  92. package/dist/modules/task-engine/policy-sensitive-commands.js +5 -0
  93. package/dist/modules/task-engine/sqlite-dual-planning.d.ts +11 -2
  94. package/dist/modules/task-engine/sqlite-dual-planning.js +134 -28
  95. package/dist/modules/task-engine/strict-task-validation.js +3 -0
  96. package/dist/modules/task-engine/suggestions.js +2 -1
  97. package/dist/modules/task-engine/task-engine-internal.d.ts +2 -0
  98. package/dist/modules/task-engine/task-engine-internal.js +1304 -0
  99. package/dist/modules/task-engine/task-type-validation.js +40 -0
  100. package/dist/modules/task-engine/wishlist-intake.d.ts +22 -0
  101. package/dist/modules/task-engine/wishlist-intake.js +180 -0
  102. package/dist/modules/task-engine/wishlist-validation.d.ts +4 -0
  103. package/dist/modules/task-engine/wishlist-validation.js +19 -0
  104. package/dist/modules/workspace-config/index.js +9 -11
  105. package/package.json +2 -2
  106. package/schemas/agent-behavior-profile.schema.json +52 -0
  107. package/schemas/task-engine-run-contracts.schema.json +80 -5
  108. package/src/modules/documentation/README.md +16 -25
  109. package/src/modules/documentation/RULES.md +9 -9
  110. package/src/modules/documentation/index.ts +54 -49
  111. package/src/modules/documentation/instructions/document-project.md +6 -6
  112. package/src/modules/documentation/instructions/generate-document.md +4 -4
  113. package/src/modules/documentation/normalizer.ts +187 -0
  114. package/src/modules/documentation/parser.ts +41 -0
  115. package/src/modules/documentation/policy-sensitive-commands.ts +8 -0
  116. package/src/modules/documentation/renderer.ts +121 -0
  117. package/src/modules/documentation/runtime-batch.ts +74 -0
  118. package/src/modules/documentation/runtime-config.ts +68 -0
  119. package/src/modules/documentation/runtime-render-support.ts +39 -0
  120. package/src/modules/documentation/runtime.ts +28 -600
  121. package/src/modules/documentation/schemas/documentation-schema.md +37 -54
  122. package/src/modules/documentation/types.ts +228 -0
  123. package/src/modules/documentation/validator.ts +247 -0
  124. package/src/modules/documentation/view-models.ts +132 -0
  125. package/src/modules/documentation/views/agents.view.yaml +18 -0
  126. package/src/modules/documentation/views/architecture.view.yaml +18 -0
  127. package/src/modules/documentation/views/principles.view.yaml +18 -0
  128. package/src/modules/documentation/views/readme.view.yaml +18 -0
  129. package/src/modules/documentation/views/releasing.view.yaml +18 -0
  130. package/src/modules/documentation/views/roadmap.view.yaml +18 -0
  131. package/src/modules/documentation/views/runbooks-consumer-cadence.view.yaml +18 -0
  132. package/src/modules/documentation/views/runbooks-parity-validation-flow.view.yaml +18 -0
  133. package/src/modules/documentation/views/runbooks-release-channels.view.yaml +18 -0
  134. package/src/modules/documentation/views/security.view.yaml +18 -0
  135. package/src/modules/documentation/views/support.view.yaml +18 -0
  136. package/src/modules/documentation/views/terms.view.yaml +18 -0
  137. package/src/modules/documentation/views/workbooks-phase2-config-policy-workbook.view.yaml +18 -0
  138. package/src/modules/documentation/views/workbooks-task-engine-workbook.view.yaml +18 -0
  139. package/src/modules/documentation/views/workbooks-transcript-automation-baseline.view.yaml +18 -0
  140. package/src/modules/documentation/state.md +0 -8
@@ -0,0 +1,132 @@
1
+ import { readdir, readFile } from "node:fs/promises";
2
+ import { existsSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { dirname } from "node:path";
5
+ import { fileURLToPath } from "node:url";
6
+ import type { ViewModelDefinition, ViewModelSection, ViewRenderPolicy } from "./types.js";
7
+
8
+ function parseScalar(raw: string): string | number | boolean {
9
+ const v = raw.trim();
10
+ if (v === "true") return true;
11
+ if (v === "false") return false;
12
+ if (/^-?\d+$/.test(v)) return Number.parseInt(v, 10);
13
+ return v.replace(/^"(.*)"$/, "$1");
14
+ }
15
+
16
+ function parseBlock(lines: string[], start: number, indent: number): { end: number; items: Record<string, unknown>[] } {
17
+ const items: Record<string, unknown>[] = [];
18
+ let idx = start;
19
+ while (idx < lines.length) {
20
+ const line = lines[idx];
21
+ const currentIndent = line.search(/\S|$/);
22
+ if (currentIndent < indent) break;
23
+ const trimmed = line.trim();
24
+ if (!trimmed.startsWith("- ")) {
25
+ idx += 1;
26
+ continue;
27
+ }
28
+ const item: Record<string, unknown> = {};
29
+ const first = trimmed.slice(2);
30
+ if (first.includes(":")) {
31
+ const split = first.indexOf(":");
32
+ const k = first.slice(0, split).trim();
33
+ const v = first.slice(split + 1).trim();
34
+ item[k] = parseScalar(v);
35
+ }
36
+ idx += 1;
37
+ while (idx < lines.length) {
38
+ const next = lines[idx];
39
+ const nextIndent = next.search(/\S|$/);
40
+ if (nextIndent <= currentIndent) break;
41
+ const t = next.trim();
42
+ const split = t.indexOf(":");
43
+ if (split > 0) {
44
+ const k = t.slice(0, split).trim();
45
+ const v = t.slice(split + 1).trim();
46
+ item[k] = parseScalar(v);
47
+ }
48
+ idx += 1;
49
+ }
50
+ items.push(item);
51
+ }
52
+ return { end: idx, items };
53
+ }
54
+
55
+ function parseViewModelYaml(text: string): ViewModelDefinition {
56
+ const lines = text
57
+ .split("\n")
58
+ .map((l) => l.replace(/\t/g, " "))
59
+ .filter((l) => l.trim().length > 0 && !l.trim().startsWith("#"));
60
+ const root: Record<string, unknown> = {};
61
+ let idx = 0;
62
+ while (idx < lines.length) {
63
+ const line = lines[idx];
64
+ const trimmed = line.trim();
65
+ const split = trimmed.indexOf(":");
66
+ if (split <= 0) {
67
+ idx += 1;
68
+ continue;
69
+ }
70
+ const key = trimmed.slice(0, split).trim();
71
+ const value = trimmed.slice(split + 1).trim();
72
+ if (!value) {
73
+ const parsed = parseBlock(lines, idx + 1, line.search(/\S|$/) + 2);
74
+ root[key] = parsed.items;
75
+ idx = parsed.end;
76
+ continue;
77
+ }
78
+ root[key] = parseScalar(value);
79
+ idx += 1;
80
+ }
81
+
82
+ const sections = (root["sections"] as Record<string, unknown>[] | undefined) ?? [];
83
+ const renderPolicies = (root["render_policies"] as Record<string, unknown>[] | undefined) ?? [];
84
+ return {
85
+ id: String(root["id"] ?? ""),
86
+ version: Number(root["version"] ?? 1),
87
+ docType: String(root["doc_type"] ?? ""),
88
+ target: String(root["target"] ?? ""),
89
+ profile: root["source_profile"] as ViewModelDefinition["profile"],
90
+ sections: sections.map(
91
+ (s) =>
92
+ ({
93
+ id: String(s["id"] ?? ""),
94
+ title: s["title"] ? String(s["title"]) : undefined,
95
+ description: s["description"] ? String(s["description"]) : undefined,
96
+ renderer: String(s["renderer"] ?? ""),
97
+ source: String(s["source"] ?? "meta") as ViewModelSection["source"],
98
+ template: s["template"] ? String(s["template"]) : undefined
99
+ }) satisfies ViewModelSection
100
+ ),
101
+ renderPolicies: renderPolicies.map(
102
+ (p) =>
103
+ ({
104
+ id: String(p["id"] ?? ""),
105
+ mode: String(p["mode"] ?? "append") as ViewRenderPolicy["mode"],
106
+ when: p["when"] ? String(p["when"]) : undefined
107
+ }) satisfies ViewRenderPolicy
108
+ )
109
+ };
110
+ }
111
+
112
+ export async function loadViewModel(workspacePath: string, viewFile: string): Promise<ViewModelDefinition> {
113
+ const fullPath = resolve(resolveViewsRoot(workspacePath), viewFile);
114
+ const content = await readFile(fullPath, "utf8");
115
+ return parseViewModelYaml(content);
116
+ }
117
+
118
+ export async function listViewModels(workspacePath: string): Promise<string[]> {
119
+ const viewsPath = resolveViewsRoot(workspacePath);
120
+ const entries = await readdir(viewsPath, { withFileTypes: true });
121
+ return entries
122
+ .filter((e) => e.isFile() && e.name.endsWith(".view.yaml"))
123
+ .map((e) => e.name)
124
+ .sort();
125
+ }
126
+
127
+ function resolveViewsRoot(workspacePath: string): string {
128
+ const local = resolve(workspacePath, "src/modules/documentation/views");
129
+ if (existsSync(local)) return local;
130
+ const runtimeSourceRoot = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..", "..");
131
+ return resolve(runtimeSourceRoot, "src/modules/documentation/views");
132
+ }
@@ -0,0 +1,18 @@
1
+ id: agents
2
+ version: 1
3
+ doc_type: agents
4
+ target: AGENTS.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: architecture
2
+ version: 1
3
+ doc_type: architecture
4
+ target: ARCHITECTURE.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: principles
2
+ version: 1
3
+ doc_type: principles
4
+ target: PRINCIPLES.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: readme
2
+ version: 1
3
+ doc_type: readme
4
+ target: README.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: releasing
2
+ version: 1
3
+ doc_type: releasing
4
+ target: RELEASING.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: roadmap
2
+ version: 1
3
+ doc_type: roadmap
4
+ target: ROADMAP.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: runbooks-consumer-cadence
2
+ version: 1
3
+ doc_type: runbooks-consumer-cadence
4
+ target: runbooks/consumer-cadence.md
5
+ source_profile: runbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: runbooks-parity-validation-flow
2
+ version: 1
3
+ doc_type: runbooks-parity-validation-flow
4
+ target: runbooks/parity-validation-flow.md
5
+ source_profile: runbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: runbooks-release-channels
2
+ version: 1
3
+ doc_type: runbooks-release-channels
4
+ target: runbooks/release-channels.md
5
+ source_profile: runbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: security
2
+ version: 1
3
+ doc_type: security
4
+ target: SECURITY.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: support
2
+ version: 1
3
+ doc_type: support
4
+ target: SUPPORT.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: terms
2
+ version: 1
3
+ doc_type: terms
4
+ target: TERMS.md
5
+ source_profile: core
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: workbooks-phase2-config-policy-workbook
2
+ version: 1
3
+ doc_type: workbooks-phase2-config-policy-workbook
4
+ target: workbooks/phase2-config-policy-workbook.md
5
+ source_profile: workbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: workbooks-task-engine-workbook
2
+ version: 1
3
+ doc_type: workbooks-task-engine-workbook
4
+ target: workbooks/task-engine-workbook.md
5
+ source_profile: workbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -0,0 +1,18 @@
1
+ id: workbooks-transcript-automation-baseline
2
+ version: 1
3
+ doc_type: workbooks-transcript-automation-baseline
4
+ target: workbooks/transcript-automation-baseline.md
5
+ source_profile: workbook
6
+ sections:
7
+ - id: meta
8
+ source: meta
9
+ renderer: renderMetaSection
10
+ - id: rules
11
+ source: rules
12
+ renderer: renderRuleSection
13
+ - id: decisions
14
+ source: decisions
15
+ renderer: renderDecisionSection
16
+ render_policies:
17
+ - id: default
18
+ mode: append
@@ -1,8 +0,0 @@
1
- # Documentation Module State
2
-
3
- Tracks current module runtime state and generation metadata.
4
-
5
- - `lastRunAt`: last successful generation timestamp
6
- - `lastRunInputs`: summary of source inputs and command arguments
7
- - `lastRunOutputs`: generated file list and checks
8
- - `lastRunStatus`: `ok` or `failed`