@jstn-sdk/ma 0.1.13 → 0.14.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 (253) hide show
  1. package/.agents/plugins/marketplace.json +0 -0
  2. package/.codex/agents/Architect.toml +1 -0
  3. package/.codex/agents/Auditor.toml +1 -0
  4. package/.codex/agents/Builder.toml +1 -0
  5. package/.codex/agents/Flow.toml +1 -0
  6. package/.codex/agents/Sage.toml +1 -0
  7. package/.codex/agents/Vibe.toml +1 -0
  8. package/.codex/hooks.json +12 -2
  9. package/.codex/prompts/enforcement.md +0 -0
  10. package/.codex/prompts/onboarding.md +6 -1
  11. package/.codex/prompts/release-rules.md +0 -0
  12. package/.codex/prompts/skill-contract.md +0 -0
  13. package/COVERAGE.md +7 -7
  14. package/DEMO.md +15 -6
  15. package/LICENSE +0 -0
  16. package/README.md +126 -793
  17. package/bin/ma.js +585 -97
  18. package/data/clone-data.ledger.json +0 -0
  19. package/data/clone-data.proof.json +0 -0
  20. package/data/clone-data.rvf +0 -0
  21. package/docs/README.md +8 -2
  22. package/docs/autonomous-tasks.md +46 -0
  23. package/docs/codex-integration.md +16 -0
  24. package/docs/getting-started.md +28 -4
  25. package/docs/installed-sdk.md +0 -0
  26. package/docs/mcp-setup.md +30 -1
  27. package/docs/qa/{release-issue-gates-0.1.13.json → release-issue-gates-0.14.0.json} +77 -77
  28. package/docs/qa/release-readiness-0.1.5.md +0 -0
  29. package/docs/qa/{release-readiness-0.1.13.md → release-readiness-0.14.0.md} +12 -12
  30. package/docs/quality.md +24 -0
  31. package/docs/reference/native-engineering-patterns.md +0 -0
  32. package/docs/reference/native-security-playbooks.md +0 -0
  33. package/docs/reference/native-source-selection.md +0 -0
  34. package/docs/reference/native-style-and-deslop.md +0 -0
  35. package/docs/release-spec.md +27 -14
  36. package/docs/skills.md +1 -1
  37. package/index.js +73 -0
  38. package/mcp/collections.json +0 -0
  39. package/mcp/fallback.json +0 -0
  40. package/mcp/local/code-intel.js +179 -41
  41. package/mcp/local/context.js +180 -0
  42. package/mcp/local/memory.js +17 -6
  43. package/mcp/local/playbooks.js +0 -0
  44. package/mcp/local/quality.js +39 -0
  45. package/mcp/local/state.js +7 -3
  46. package/mcp/local/team-run.js +8 -3
  47. package/mcp/local/trace.js +0 -0
  48. package/mcp/local-capabilities.json +9 -0
  49. package/mcp/native-playbooks.json +0 -0
  50. package/mcp/servers.json +0 -0
  51. package/package.json +26 -4
  52. package/plugins/meta-architect/.app.json +1 -1
  53. package/plugins/meta-architect/.codex-plugin/plugin.json +1 -1
  54. package/plugins/meta-architect/.mcp.json +1 -1
  55. package/plugins/meta-architect/README.md +2 -2
  56. package/plugins/meta-architect/obsidian/main.js +137 -4
  57. package/plugins/meta-architect/obsidian/manifest.json +1 -1
  58. package/plugins/meta-architect/obsidian/styles.css +0 -0
  59. package/plugins/meta-architect/skills/align/SKILL.md +0 -0
  60. package/plugins/meta-architect/skills/align/agents/openai.yaml +0 -0
  61. package/plugins/meta-architect/skills/align/references/shared-language.md +0 -0
  62. package/plugins/meta-architect/skills/arch/SKILL.md +0 -0
  63. package/plugins/meta-architect/skills/arch/agents/openai.yaml +0 -0
  64. package/plugins/meta-architect/skills/build/SKILL.md +0 -0
  65. package/plugins/meta-architect/skills/build/agents/openai.yaml +0 -0
  66. package/plugins/meta-architect/skills/cleanup/SKILL.md +0 -0
  67. package/plugins/meta-architect/skills/cleanup/agents/openai.yaml +0 -0
  68. package/plugins/meta-architect/skills/cleanup/references/style-and-deslop.md +0 -0
  69. package/plugins/meta-architect/skills/diagnose/SKILL.md +0 -0
  70. package/plugins/meta-architect/skills/diagnose/agents/openai.yaml +0 -0
  71. package/plugins/meta-architect/skills/flow/SKILL.md +0 -0
  72. package/plugins/meta-architect/skills/flow/agents/openai.yaml +0 -0
  73. package/plugins/meta-architect/skills/maestro/SKILL.md +0 -0
  74. package/plugins/meta-architect/skills/maestro/agents/openai.yaml +0 -0
  75. package/plugins/meta-architect/skills/maestro/references/core-release-rules.md +0 -0
  76. package/plugins/meta-architect/skills/maestro/references/native-ingest-map.md +0 -0
  77. package/plugins/meta-architect/skills/sage/SKILL.md +0 -0
  78. package/plugins/meta-architect/skills/sage/agents/openai.yaml +0 -0
  79. package/plugins/meta-architect/skills/sage/references/source-selection.md +0 -0
  80. package/plugins/meta-architect/skills/tdd/SKILL.md +0 -0
  81. package/plugins/meta-architect/skills/tdd/agents/openai.yaml +0 -0
  82. package/plugins/meta-architect/skills/vet/SKILL.md +0 -0
  83. package/plugins/meta-architect/skills/vet/agents/openai.yaml +0 -0
  84. package/plugins/meta-architect/skills/vet/references/security-playbooks.md +0 -0
  85. package/plugins/meta-architect/skills/vibe/SKILL.md +0 -0
  86. package/plugins/meta-architect/skills/vibe/agents/openai.yaml +0 -0
  87. package/schemas/autonomous-task-queue.schema.json +56 -0
  88. package/schemas/handoff-packet.schema.json +36 -0
  89. package/schemas/setup-receipt.schema.json +28 -0
  90. package/schemas/skill-frontmatter.schema.json +20 -0
  91. package/schemas/support-bundle.schema.json +37 -0
  92. package/schemas/task-contract.schema.json +31 -0
  93. package/scripts/active-autonomy-hook.mjs +141 -11
  94. package/scripts/biome-staged.js +0 -0
  95. package/scripts/build-linux-packages.mjs +7 -3
  96. package/scripts/cleanup-test-fixtures.sh +55 -0
  97. package/scripts/context-hydration-hook.mjs +89 -0
  98. package/scripts/demo-smoke.js +285 -0
  99. package/scripts/doctor.js +10 -8
  100. package/scripts/install.sh +33 -4
  101. package/scripts/install.sh.sha256 +1 -0
  102. package/scripts/linux-package-lib.mjs +0 -0
  103. package/scripts/linux-package-smoke.mjs +2 -2
  104. package/scripts/package-size-check.mjs +26 -0
  105. package/scripts/plugin-sync.js +83 -17
  106. package/scripts/postinstall.js +17 -10
  107. package/scripts/prepack.js +9 -0
  108. package/scripts/ralph/prompt.md +0 -0
  109. package/scripts/release-metadata.js +0 -0
  110. package/scripts/release-sync.js +72 -7
  111. package/scripts/release-verify.js +100 -7
  112. package/scripts/setup-npmrc.js +48 -23
  113. package/scripts/skills-install.js +9 -2
  114. package/scripts/skills-manifest.js +2 -21
  115. package/scripts/skills-pack.js +2 -2
  116. package/scripts/skills-validate.js +5 -55
  117. package/skills/align/SKILL.md +0 -0
  118. package/skills/align/agents/openai.yaml +0 -0
  119. package/skills/align/references/shared-language.md +0 -0
  120. package/skills/arch/SKILL.md +0 -0
  121. package/skills/arch/agents/openai.yaml +0 -0
  122. package/skills/build/SKILL.md +0 -0
  123. package/skills/build/agents/openai.yaml +0 -0
  124. package/skills/cleanup/SKILL.md +0 -0
  125. package/skills/cleanup/agents/openai.yaml +0 -0
  126. package/skills/cleanup/references/style-and-deslop.md +0 -0
  127. package/skills/diagnose/SKILL.md +0 -0
  128. package/skills/diagnose/agents/openai.yaml +0 -0
  129. package/skills/flow/SKILL.md +0 -0
  130. package/skills/flow/agents/openai.yaml +0 -0
  131. package/skills/index.json +0 -0
  132. package/skills/maestro/SKILL.md +0 -0
  133. package/skills/maestro/agents/openai.yaml +0 -0
  134. package/skills/maestro/references/core-release-rules.md +0 -0
  135. package/skills/maestro/references/native-ingest-map.md +0 -0
  136. package/skills/sage/SKILL.md +0 -0
  137. package/skills/sage/agents/openai.yaml +0 -0
  138. package/skills/sage/references/source-selection.md +0 -0
  139. package/skills/tdd/SKILL.md +0 -0
  140. package/skills/tdd/agents/openai.yaml +0 -0
  141. package/skills/vet/SKILL.md +0 -0
  142. package/skills/vet/agents/openai.yaml +0 -0
  143. package/skills/vet/references/security-playbooks.md +0 -0
  144. package/skills/vibe/SKILL.md +0 -0
  145. package/skills/vibe/agents/openai.yaml +0 -0
  146. package/sprint/00-idea.md +0 -0
  147. package/sprint/01-architecture.md +0 -0
  148. package/sprint/02-oss-evidence.md +0 -0
  149. package/sprint/03-logic.md +0 -0
  150. package/sprint/04-security.md +0 -0
  151. package/sprint/05-dx-ux.md +0 -0
  152. package/sprint/06-build-plan.md +0 -0
  153. package/sprint/07-release.md +0 -0
  154. package/src/agents.js +279 -0
  155. package/src/bootstrap.js +252 -63
  156. package/src/build-gate.js +0 -0
  157. package/src/codex-app-server.js +291 -0
  158. package/src/decision-log.js +0 -0
  159. package/src/fs-utils.js +175 -4
  160. package/src/launcher.js +24 -21
  161. package/src/mcp-config.js +9 -1
  162. package/src/mcp-live-client.js +140 -7
  163. package/src/paths.js +6 -1
  164. package/src/policy.js +2 -2
  165. package/src/prelaunch.js +189 -0
  166. package/src/quality/ai-quality-orchestrator.js +328 -0
  167. package/src/release-issue-gates.js +62 -0
  168. package/src/release-operations.js +62 -0
  169. package/src/release-state.js +0 -0
  170. package/src/runtime/active-autonomy-core.js +0 -0
  171. package/src/runtime/agent-compat.js +31 -0
  172. package/src/runtime/alignment-sentinel.js +0 -0
  173. package/src/runtime/architect-review.js +248 -10
  174. package/src/runtime/autonomous-tasks.js +408 -0
  175. package/src/runtime/build-readiness.js +0 -0
  176. package/src/runtime/code-graph-rehearse.js +0 -0
  177. package/src/runtime/codeburn-core.js +112 -0
  178. package/src/runtime/context-authority.js +40 -0
  179. package/src/runtime/context-economy-core.js +40 -0
  180. package/src/runtime/continuity-graph.js +201 -0
  181. package/src/runtime/continuity-notes.js +71 -26
  182. package/src/runtime/core-source-ingest.js +0 -0
  183. package/src/runtime/detached-provider.js +82 -14
  184. package/src/runtime/doctor-report.js +18 -0
  185. package/src/runtime/environment-awareness-core.js +0 -0
  186. package/src/runtime/exposure-catalog.js +0 -0
  187. package/src/runtime/graphify-core.js +167 -0
  188. package/src/runtime/guidance-stack.js +9 -2
  189. package/src/runtime/handoff-packets.js +92 -0
  190. package/src/runtime/headroom-core.js +104 -0
  191. package/src/runtime/helper-orchestration-core.js +0 -0
  192. package/src/runtime/hook-profiles.js +20 -0
  193. package/src/runtime/learning-loop-core.js +110 -4
  194. package/src/runtime/live-agent-verification.js +122 -0
  195. package/src/runtime/maestro-events.js +0 -0
  196. package/src/runtime/maestro-manager.js +0 -0
  197. package/src/runtime/maestro-output.js +58 -0
  198. package/src/runtime/maestro-state.js +0 -0
  199. package/src/runtime/managed-markdown.js +29 -0
  200. package/src/runtime/mcp-authority.js +147 -0
  201. package/src/runtime/mcp-policy.js +0 -0
  202. package/src/runtime/obsidian-integration-core.js +255 -17
  203. package/src/runtime/obsidian-plugin-bridge.js +344 -38
  204. package/src/runtime/orchestrator.js +0 -0
  205. package/src/runtime/pi-maestro-core.js +89 -0
  206. package/src/runtime/preferences.js +79 -0
  207. package/src/runtime/project-context.js +636 -0
  208. package/src/runtime/prompt-strategy-core.js +0 -0
  209. package/src/runtime/quorum-review.js +0 -0
  210. package/src/runtime/ralph-execution-core.js +0 -0
  211. package/src/runtime/redaction-gateway.js +218 -19
  212. package/src/runtime/runtime-state.js +94 -2
  213. package/src/runtime/schema-migrations.js +162 -0
  214. package/src/runtime/semantic-recording-core.js +0 -0
  215. package/src/runtime/signal-hooks.js +13 -0
  216. package/src/runtime/skills-registry-export.js +92 -8
  217. package/src/runtime/startup-path.js +0 -0
  218. package/src/runtime/task-contracts.js +83 -0
  219. package/src/runtime/universal-plugin-broker-core.js +373 -50
  220. package/src/runtime/workspace-intelligence-runtime.js +0 -0
  221. package/src/runtime/workspace-virtualizer.js +0 -0
  222. package/src/runtime/workspaces.js +0 -0
  223. package/src/runtime-artifacts.js +0 -0
  224. package/src/setup-lifecycle.js +359 -0
  225. package/src/skill-frontmatter.js +78 -0
  226. package/src/skill-installer.js +226 -71
  227. package/src/skills.js +297 -19
  228. package/src/state-sync.js +0 -0
  229. package/src/test-fixtures.js +543 -0
  230. package/src/tui/grid.js +67 -0
  231. package/src/tui/status-grid.js +23 -0
  232. package/support-bundle.json +114 -0
  233. package/templates/AGENTS.md +6 -2
  234. package/templates/catalog-manifest.json +0 -0
  235. package/templates/model-instructions/core.md +0 -0
  236. package/templates/model-instructions/release.md +0 -0
  237. package/templates/model-instructions/security.md +0 -0
  238. package/templates/quality/ai-quality-rules.yml +37 -0
  239. package/docs/assets/image/Screenshot(1).png +0 -0
  240. package/docs/assets/image/Screenshot(2).png +0 -0
  241. package/docs/assets/image/Screenshot(3).png +0 -0
  242. package/docs/assets/image/Screenshot(4).png +0 -0
  243. package/docs/assets/image/Screenshot(5).png +0 -0
  244. package/docs/assets/image/Screenshot(6).png +0 -0
  245. package/docs/assets/image/Screenshot(7).png +0 -0
  246. package/docs/assets/image/Screenshot(8).png +0 -0
  247. package/docs/assets/image/Screenshot(9).png +0 -0
  248. package/docs/assets/meta-architect-logo.png +0 -0
  249. package/docs/assets/meta-architect-logo.svg +0 -8
  250. package/docs/onboarding.md +0 -81
  251. package/docs/prompt-guidance-contract.md +0 -17
  252. package/docs/prompt-guidance-fragments/active-autonomy-core.md +0 -7
  253. package/docs/skills-publishing.md +0 -255
@@ -0,0 +1,180 @@
1
+ import path from "node:path";
2
+ import { loadLearningLoopCore, loadLearningRecords } from "../../src/runtime/learning-loop-core.js";
3
+ import {
4
+ loadObsidianVaultIndex,
5
+ loadObsidianVaultOperations,
6
+ } from "../../src/runtime/obsidian-integration-core.js";
7
+ import { resolvePreferences } from "../../src/runtime/preferences.js";
8
+ import { loadProjectIndex } from "../../src/runtime/project-context.js";
9
+ import {
10
+ loadRuntimeHookReceipts,
11
+ loadRuntimeHooksAuditLog,
12
+ loadRuntimeHooksConfig,
13
+ } from "../../src/runtime/signal-hooks.js";
14
+
15
+ const contextResources = [
16
+ "context://project-index",
17
+ "context://learning",
18
+ "context://obsidian",
19
+ "context://hooks",
20
+ "context://freshness",
21
+ "context://commands",
22
+ "context://agent-brief",
23
+ "context://architecture",
24
+ "context://preferences",
25
+ ];
26
+
27
+ export function listContextResources() {
28
+ return [...contextResources];
29
+ }
30
+
31
+ async function readOptional(loader, fallback) {
32
+ try {
33
+ return { available: true, data: await loader() };
34
+ } catch (error) {
35
+ if (error?.code === "ENOENT") return { available: false, data: fallback };
36
+ throw error;
37
+ }
38
+ }
39
+
40
+ function envelope(resource, result, extra = {}) {
41
+ const freshness = extra.freshness ?? result.data?.freshness ?? null;
42
+ return {
43
+ record_type: `mcp_context:${resource}`,
44
+ authority: "source_truth",
45
+ source: "meta-architect-runtime",
46
+ resource,
47
+ ...extra,
48
+ ...result,
49
+ context: {
50
+ authority: extra.authority ?? "generated_context",
51
+ source: "meta-architect-runtime",
52
+ freshness,
53
+ provenance: result.data?.sourceFiles?.map((file) => file.path) ?? [],
54
+ },
55
+ quality: result.data?.quality ?? extra.quality ?? null,
56
+ };
57
+ }
58
+
59
+ export async function readContextResource(uri) {
60
+ if (uri === "context://project-index") {
61
+ const result = await readOptional(loadProjectIndex, null);
62
+ return envelope("project-index", result, {
63
+ authority: result.available ? "source_truth" : "missing_source_truth",
64
+ fact_ids: result.data?.facts?.map((fact) => fact.id) ?? [],
65
+ provenance:
66
+ result.data?.facts?.map((fact) => ({ id: fact.id, provenance: fact.provenance })) ?? [],
67
+ });
68
+ }
69
+
70
+ if (uri === "context://learning") {
71
+ const [core, records] = await Promise.all([
72
+ readOptional(loadLearningLoopCore, null),
73
+ readOptional(loadLearningRecords, []),
74
+ ]);
75
+ return envelope(
76
+ "learning",
77
+ {
78
+ available: core.available || records.available,
79
+ data: {
80
+ core: core.data,
81
+ records: records.data,
82
+ failure_records: records.data.filter((record) => Boolean(record.failure_state)),
83
+ },
84
+ },
85
+ {
86
+ authority: "generated_context",
87
+ fact_ids: records.data.flatMap((record) => record.fact_ids ?? []),
88
+ },
89
+ );
90
+ }
91
+
92
+ if (uri === "context://obsidian") {
93
+ const [index, operations] = await Promise.all([
94
+ readOptional(loadObsidianVaultIndex, null),
95
+ readOptional(loadObsidianVaultOperations, null),
96
+ ]);
97
+ return envelope(
98
+ "obsidian",
99
+ {
100
+ available: index.available || operations.available,
101
+ data: { index: index.data, operations: operations.data },
102
+ },
103
+ { authority: "vault_note" },
104
+ );
105
+ }
106
+
107
+ if (uri === "context://hooks") {
108
+ const [config, audit, receipts] = await Promise.all([
109
+ readOptional(loadRuntimeHooksConfig, null),
110
+ readOptional(loadRuntimeHooksAuditLog, ""),
111
+ readOptional(loadRuntimeHookReceipts, []),
112
+ ]);
113
+ return envelope(
114
+ "hooks",
115
+ {
116
+ available: config.available || audit.available,
117
+ data: { config: config.data, audit: audit.data, receipts: receipts.data },
118
+ },
119
+ { authority: "hook_evidence" },
120
+ );
121
+ }
122
+
123
+ if (
124
+ uri === "context://commands" ||
125
+ uri === "context://agent-brief" ||
126
+ uri === "context://architecture"
127
+ ) {
128
+ const relative = uri.slice("context://".length);
129
+ const loader = async () => {
130
+ if (relative === "commands") return readOptional(() => readJsonFile("commands.json"), null);
131
+ return readOptional(() => readTextFile(`${relative}.md`), "");
132
+ };
133
+ const result = await loader();
134
+ const project = await readOptional(loadProjectIndex, null);
135
+ return envelope(relative, result, {
136
+ authority: "generated_context",
137
+ freshness: { status: "derived", stale: false, source: "project-index" },
138
+ quality: project.data?.quality ?? null,
139
+ });
140
+ }
141
+
142
+ if (uri === "context://freshness") {
143
+ const result = await readOptional(loadProjectIndex, null);
144
+ return envelope(
145
+ "freshness",
146
+ { available: result.available, data: result.data?.freshness ?? null },
147
+ { authority: "source_truth" },
148
+ );
149
+ }
150
+
151
+ if (uri === "context://preferences") {
152
+ const result = await readOptional(resolvePreferences, {});
153
+ return envelope("preferences", result, { authority: "learning_memory" });
154
+ }
155
+
156
+ throw new Error(`Unknown context resource: ${uri}`);
157
+ }
158
+
159
+ async function readJsonFile(name) {
160
+ const { readJson } = await import("../../src/fs-utils.js");
161
+ return readJson(path.join(process.env.MA_ROOT || process.cwd(), ".ma", "context", name));
162
+ }
163
+
164
+ async function readTextFile(name) {
165
+ const fs = await import("node:fs/promises");
166
+ return fs.readFile(
167
+ path.join(process.env.MA_ROOT || process.cwd(), ".ma", "context", name),
168
+ "utf8",
169
+ );
170
+ }
171
+
172
+ export async function checkContextCapability() {
173
+ const project = await readContextResource("context://project-index");
174
+ return {
175
+ ready: true,
176
+ detail: project.available
177
+ ? `project context loaded with ${project.data.sourceFiles?.length ?? 0} source file(s)`
178
+ : "project context has not been generated; run ma setup",
179
+ };
180
+ }
@@ -1,11 +1,13 @@
1
+ import { loadContinuityGraph, queryContinuityGraph } from "../../src/runtime/continuity-graph.js";
1
2
  import {
2
3
  loadContinuityIndex,
3
4
  loadContinuityNotes,
4
5
  storeContinuityNote,
5
6
  } from "../../src/runtime/continuity-notes.js";
7
+ import { withMcpWriteGate } from "../../src/runtime/mcp-authority.js";
6
8
 
7
- const memoryResources = ["memory://notes", "memory://index"];
8
- const memoryTools = ["memory.store_note"];
9
+ const memoryResources = ["memory://notes", "memory://index", "memory://graph"];
10
+ const memoryTools = ["memory.store_note", "memory.query_graph"];
9
11
 
10
12
  export function listMemoryResources() {
11
13
  return [...memoryResources];
@@ -22,19 +24,28 @@ export async function readMemoryResource(uri) {
22
24
  if (uri === "memory://index") {
23
25
  return loadContinuityIndex();
24
26
  }
27
+ if (uri === "memory://graph") {
28
+ return loadContinuityGraph();
29
+ }
25
30
 
26
31
  throw new Error(`Unknown memory resource: ${uri}`);
27
32
  }
28
33
 
29
34
  export async function callMemoryTool(name, args = {}, options = {}) {
35
+ if (name === "memory.query_graph") {
36
+ return queryMemoryGraph(args);
37
+ }
30
38
  if (name !== "memory.store_note") {
31
39
  throw new Error(`Unknown memory tool: ${name}`);
32
40
  }
33
41
 
34
- return storeContinuityNote(args.content ?? "", {
35
- ...options,
36
- actor: "local-capability:memory",
37
- });
42
+ return withMcpWriteGate({ tool: name, options, payload: args }, (metadata) =>
43
+ storeContinuityNote(args.content ?? "", { ...options, ...metadata }),
44
+ );
45
+ }
46
+
47
+ export async function queryMemoryGraph(args = {}) {
48
+ return queryContinuityGraph(await loadContinuityGraph(), args);
38
49
  }
39
50
 
40
51
  export async function checkMemoryCapability() {
File without changes
@@ -0,0 +1,39 @@
1
+ import fs from "node:fs/promises";
2
+ import path from "node:path";
3
+ import { getRepoRoot } from "../../src/paths.js";
4
+
5
+ const qualityRoot = () => path.join(getRepoRoot(), ".ma", "quality");
6
+
7
+ export const qualityResources = ["quality://violations", "quality://kpis"];
8
+
9
+ export async function readQualityResource(uri) {
10
+ const file =
11
+ uri === "quality://violations"
12
+ ? "violations.json"
13
+ : uri === "quality://kpis"
14
+ ? "kpis.json"
15
+ : null;
16
+ if (!file) throw new Error(`Unknown quality resource: ${uri}`);
17
+ try {
18
+ return JSON.parse(await fs.readFile(path.join(qualityRoot(), file), "utf8"));
19
+ } catch (error) {
20
+ if (error.code === "ENOENT") return [];
21
+ throw error;
22
+ }
23
+ }
24
+
25
+ export async function queryQualityStatus() {
26
+ const [violations, kpis] = await Promise.all([
27
+ readQualityResource("quality://violations"),
28
+ readQualityResource("quality://kpis"),
29
+ ]);
30
+ return {
31
+ violations,
32
+ kpis,
33
+ passed:
34
+ violations.length > 0 &&
35
+ kpis.length > 0 &&
36
+ violations.every((record) => record.violations?.length === 0) &&
37
+ kpis.every((record) => record.kpis?.qualityScore >= 60),
38
+ };
39
+ }
@@ -1,5 +1,6 @@
1
1
  import { appendDecision } from "../../src/decision-log.js";
2
2
  import { loadManagerRunRegistryOrDefault } from "../../src/runtime/maestro-manager.js";
3
+ import { withMcpWriteGate } from "../../src/runtime/mcp-authority.js";
3
4
  import { createRuntimeSummary, loadRuntimeSnapshot } from "../../src/runtime/runtime-state.js";
4
5
  import { loadCombinedState, syncStatusUpdates } from "../../src/state-sync.js";
5
6
 
@@ -45,15 +46,18 @@ export async function readStateResource(uri) {
45
46
  }
46
47
 
47
48
  export async function callStateTool(name, args = {}, options = {}) {
48
- const localOptions = { ...options, actor: "local-capability:_state" };
49
49
  if (name === "state.sync_release_status") {
50
50
  const statusUpdates = args.statusUpdates ?? args;
51
- return syncStatusUpdates(statusUpdates, localOptions);
51
+ return withMcpWriteGate({ tool: name, options, payload: statusUpdates }, (metadata) =>
52
+ syncStatusUpdates(statusUpdates, metadata),
53
+ );
52
54
  }
53
55
 
54
56
  if (name === "state.append_decision") {
55
57
  const entry = args.entry ?? args;
56
- return appendDecision(entry, localOptions);
58
+ return withMcpWriteGate({ tool: name, options, payload: entry }, (metadata) =>
59
+ appendDecision(entry, metadata),
60
+ );
57
61
  }
58
62
 
59
63
  throw new Error(`Unknown _state tool: ${name}`);
@@ -1,4 +1,5 @@
1
1
  import fs from "node:fs/promises";
2
+ import { withMcpWriteGate } from "../../src/runtime/mcp-authority.js";
2
3
  import {
3
4
  controlTask,
4
5
  getTask,
@@ -50,9 +51,11 @@ export async function readTeamRunResource(uri) {
50
51
  }
51
52
 
52
53
  export async function callTeamRunTool(name, args = {}, options = {}) {
53
- const localOptions = { ...options, actor: "local-capability:team_run" };
54
54
  if (name === "team_run.submit_task") {
55
- return submitTask(args.task ?? args, localOptions);
55
+ const task = args.task ?? args;
56
+ return withMcpWriteGate({ tool: name, options, payload: task }, (metadata) =>
57
+ submitTask(task, metadata),
58
+ );
56
59
  }
57
60
  if (name === "team_run.get_status") {
58
61
  return getTask(args.taskId);
@@ -64,7 +67,9 @@ export async function callTeamRunTool(name, args = {}, options = {}) {
64
67
  return waitForTask(args.taskId, args);
65
68
  }
66
69
  if (name === "team_run.control_task") {
67
- return controlTask(args.taskId, args.action, localOptions);
70
+ return withMcpWriteGate({ tool: name, options, payload: args }, (metadata) =>
71
+ controlTask(args.taskId, args.action, metadata),
72
+ );
68
73
  }
69
74
 
70
75
  throw new Error(`Unknown team_run tool: ${name}`);
File without changes
@@ -51,6 +51,15 @@
51
51
  "module": "./local/playbooks.js",
52
52
  "readinessCheck": "checkPlaybooksCapability",
53
53
  "seededByBootstrap": true
54
+ },
55
+ {
56
+ "kind": "local-capability",
57
+ "capability": "context",
58
+ "transport": "inproc",
59
+ "module": "./local/context.js",
60
+ "readinessCheck": "checkContextCapability",
61
+ "seededByBootstrap": true,
62
+ "authorityMode": "read-only-evidence"
54
63
  }
55
64
  ]
56
65
  }
File without changes
package/mcp/servers.json CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jstn-sdk/ma",
3
- "version": "0.1.13",
3
+ "version": "0.14.0",
4
4
  "description": "Codex-native skills system for architecture, evidence, review, and gated build guidance.",
5
5
  "license": "MIT",
6
6
  "author": "JustineDevs",
@@ -40,9 +40,21 @@
40
40
  "templates/",
41
41
  "sprint/",
42
42
  "skills/",
43
- "docs/",
43
+ "docs/README.md",
44
+ "docs/getting-started.md",
45
+ "docs/skills.md",
46
+ "docs/mcp-setup.md",
47
+ "docs/installed-sdk.md",
48
+ "docs/release-spec.md",
49
+ "docs/quality.md",
50
+ "docs/codex-integration.md",
51
+ "docs/autonomous-tasks.md",
52
+ "docs/reference/",
53
+ "docs/qa/",
44
54
  "data/",
45
55
  "scripts/",
56
+ "schemas/",
57
+ "support-bundle.json",
46
58
  "index.js",
47
59
  "README.md",
48
60
  "DEMO.md",
@@ -58,8 +70,12 @@
58
70
  },
59
71
  "scripts": {
60
72
  "prepare": "husky",
73
+ "prepack": "node ./scripts/prepack.js",
61
74
  "postinstall": "node ./scripts/postinstall.js",
62
- "test": "node --test --test-concurrency=1",
75
+ "test": "node --test --test-concurrency=1 test/*.test.js",
76
+ "test:disk": "node --test --test-concurrency=1 test/test-fixtures.test.js",
77
+ "fixtures:cleanup": "bash ./scripts/cleanup-test-fixtures.sh",
78
+ "demo:smoke": "node ./scripts/demo-smoke.js",
63
79
  "status": "node ./bin/ma.js status",
64
80
  "linux:packages:build": "node ./scripts/build-linux-packages.mjs",
65
81
  "linux:packages:smoke": "node ./scripts/linux-package-smoke.mjs",
@@ -69,6 +85,7 @@
69
85
  "release:advance": "node ./scripts/release-sync.js --force --bump patch",
70
86
  "release:verify": "node ./scripts/release-verify.js",
71
87
  "release:assets": "node ./.github/scripts/validate-release-assets.js",
88
+ "release:assets:generate": "node ./.github/scripts/validate-release-assets.js --generate",
72
89
  "release:check": "npm run release:verify && npm run skills:manifest && npm run plugin:sync && npm run skills:validate && npm run plugin:verify && npm run skills:pack && npm run check && npm test && npm run pack:inspect",
73
90
  "skills:manifest": "node ./scripts/skills-manifest.js",
74
91
  "skills:validate": "node ./scripts/skills-validate.js",
@@ -77,7 +94,9 @@
77
94
  "plugin:sync": "node ./scripts/plugin-sync.js",
78
95
  "plugin:verify": "node ./scripts/plugin-sync.js --check",
79
96
  "pack:inspect": "npm pack --dry-run --ignore-scripts --cache ./.npm-cache",
80
- "doctor": "node ./scripts/doctor.js",
97
+ "package:size": "node ./scripts/package-size-check.mjs",
98
+ "package:doctor": "node ./scripts/doctor.js",
99
+ "release:doctor": "npm run package:doctor",
81
100
  "lint": "biome lint .",
82
101
  "format": "biome format .",
83
102
  "check": "biome check ."
@@ -89,5 +108,8 @@
89
108
  "devDependencies": {
90
109
  "@biomejs/biome": "^2.4.13",
91
110
  "husky": "^9.1.7"
111
+ },
112
+ "dependencies": {
113
+ "@jstn-sdk/agents": "0.1.0"
92
114
  }
93
115
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "meta-architect",
3
3
  "displayName": "Meta-Architect",
4
- "version": "0.1.13",
4
+ "version": "0.14.0",
5
5
  "description": "Programmatic architecture and verified engineering skills for Codex-native workflows.",
6
6
  "entry": "./README.md",
7
7
  "skillsDir": "./skills"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meta-architect",
3
- "version": "0.1.13",
3
+ "version": "0.14.0",
4
4
  "description": "Skills-first workflow layer for Codex with a bounded autonomous manager, architecture, evidence, review, and gated build guidance.",
5
5
  "author": {
6
6
  "name": "JustineDevs",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meta-architect",
3
- "version": "0.1.13",
3
+ "version": "0.14.0",
4
4
  "collections": [
5
5
  "sindresorhus/awesome",
6
6
  "dzharii/awesome-typescript",
@@ -52,7 +52,7 @@ Recommended CLI install for macOS, Linux, WSL, and Git-Bash:
52
52
 
53
53
  ```bash
54
54
  # One-line install (POSIX shells only; use WSL/Git-Bash on Windows)
55
- curl -fsSL https://cdn.jsdelivr.net/gh/JustineDevs/meta-architect@main/scripts/install.sh | sh
55
+ curl -fsSLo install.sh https://cdn.jsdelivr.net/gh/JustineDevs/meta-architect@latest/scripts/install.sh && curl -fsSLo install.sh.sha256 https://cdn.jsdelivr.net/gh/JustineDevs/meta-architect@latest/scripts/install.sh.sha256 && sed 's#scripts/install.sh#install.sh#' install.sh.sha256 | sha256sum -c - && sh install.sh
56
56
  ```
57
57
 
58
58
  Canonical package/runtime path:
@@ -138,7 +138,7 @@ When consuming the plugin:
138
138
  The plugin version should track the release scope of the core repo.
139
139
 
140
140
  For this repository:
141
- - plugin scope is aligned to Meta-Architect `v0.1.13`
141
+ - plugin scope is aligned to Meta-Architect `v0.14.0`
142
142
  - any breaking contract change should be versioned intentionally
143
143
 
144
144
  The plugin is one distribution surface of the same product, not a separate product line.