@jstn-sdk/ma 0.1.13 → 0.14.1

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 (259) 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 +9 -9
  14. package/DEMO.md +15 -6
  15. package/LICENSE +0 -0
  16. package/README.md +127 -784
  17. package/bin/ma.js +591 -105
  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/assets/banner.png +0 -0
  23. package/docs/autonomous-tasks.md +46 -0
  24. package/docs/codex-integration.md +16 -0
  25. package/docs/getting-started.md +32 -8
  26. package/docs/installed-sdk.md +0 -0
  27. package/docs/mcp-setup.md +30 -1
  28. package/docs/qa/{release-issue-gates-0.1.13.json → release-issue-gates-0.14.1.json} +77 -77
  29. package/docs/qa/release-readiness-0.1.5.md +0 -0
  30. package/docs/qa/{release-readiness-0.1.13.md → release-readiness-0.14.1.md} +12 -12
  31. package/docs/quality.md +24 -0
  32. package/docs/reference/native-engineering-patterns.md +0 -0
  33. package/docs/reference/native-security-playbooks.md +0 -0
  34. package/docs/reference/native-source-selection.md +0 -0
  35. package/docs/reference/native-style-and-deslop.md +0 -0
  36. package/docs/release-spec.md +27 -14
  37. package/docs/skills.md +1 -1
  38. package/docs/vendor-plugin-publishing.md +49 -0
  39. package/index.js +73 -0
  40. package/mcp/collections.json +0 -0
  41. package/mcp/fallback.json +0 -0
  42. package/mcp/local/code-intel.js +185 -41
  43. package/mcp/local/context.js +180 -0
  44. package/mcp/local/memory.js +17 -6
  45. package/mcp/local/playbooks.js +0 -0
  46. package/mcp/local/quality.js +39 -0
  47. package/mcp/local/state.js +7 -3
  48. package/mcp/local/team-run.js +8 -3
  49. package/mcp/local/trace.js +0 -0
  50. package/mcp/local-capabilities.json +9 -0
  51. package/mcp/native-playbooks.json +0 -0
  52. package/mcp/servers.json +0 -0
  53. package/package.json +37 -6
  54. package/plugins/meta-architect/.app.json +1 -1
  55. package/plugins/meta-architect/.claude-plugin/plugin.json +12 -0
  56. package/plugins/meta-architect/.codex-plugin/plugin.json +1 -1
  57. package/plugins/meta-architect/.mcp.json +1 -1
  58. package/plugins/meta-architect/README.md +14 -2
  59. package/plugins/meta-architect/obsidian/main.js +137 -4
  60. package/plugins/meta-architect/obsidian/manifest.json +1 -1
  61. package/plugins/meta-architect/obsidian/styles.css +0 -0
  62. package/plugins/meta-architect/skills/align/SKILL.md +0 -0
  63. package/plugins/meta-architect/skills/align/agents/openai.yaml +0 -0
  64. package/plugins/meta-architect/skills/align/references/shared-language.md +0 -0
  65. package/plugins/meta-architect/skills/arch/SKILL.md +0 -0
  66. package/plugins/meta-architect/skills/arch/agents/openai.yaml +0 -0
  67. package/plugins/meta-architect/skills/build/SKILL.md +0 -0
  68. package/plugins/meta-architect/skills/build/agents/openai.yaml +0 -0
  69. package/plugins/meta-architect/skills/cleanup/SKILL.md +0 -0
  70. package/plugins/meta-architect/skills/cleanup/agents/openai.yaml +0 -0
  71. package/plugins/meta-architect/skills/cleanup/references/style-and-deslop.md +0 -0
  72. package/plugins/meta-architect/skills/diagnose/SKILL.md +0 -0
  73. package/plugins/meta-architect/skills/diagnose/agents/openai.yaml +0 -0
  74. package/plugins/meta-architect/skills/flow/SKILL.md +0 -0
  75. package/plugins/meta-architect/skills/flow/agents/openai.yaml +0 -0
  76. package/plugins/meta-architect/skills/maestro/SKILL.md +17 -1
  77. package/plugins/meta-architect/skills/maestro/agents/openai.yaml +0 -0
  78. package/plugins/meta-architect/skills/maestro/references/core-release-rules.md +2 -2
  79. package/plugins/meta-architect/skills/maestro/references/native-ingest-map.md +0 -0
  80. package/plugins/meta-architect/skills/sage/SKILL.md +0 -0
  81. package/plugins/meta-architect/skills/sage/agents/openai.yaml +0 -0
  82. package/plugins/meta-architect/skills/sage/references/source-selection.md +0 -0
  83. package/plugins/meta-architect/skills/tdd/SKILL.md +0 -0
  84. package/plugins/meta-architect/skills/tdd/agents/openai.yaml +0 -0
  85. package/plugins/meta-architect/skills/vet/SKILL.md +0 -0
  86. package/plugins/meta-architect/skills/vet/agents/openai.yaml +0 -0
  87. package/plugins/meta-architect/skills/vet/references/security-playbooks.md +0 -0
  88. package/plugins/meta-architect/skills/vibe/SKILL.md +0 -0
  89. package/plugins/meta-architect/skills/vibe/agents/openai.yaml +0 -0
  90. package/schemas/autonomous-task-queue.schema.json +58 -0
  91. package/schemas/handoff-packet.schema.json +36 -0
  92. package/schemas/setup-receipt.schema.json +28 -0
  93. package/schemas/skill-frontmatter.schema.json +20 -0
  94. package/schemas/support-bundle.schema.json +37 -0
  95. package/schemas/task-contract.schema.json +31 -0
  96. package/scripts/active-autonomy-hook.mjs +141 -11
  97. package/scripts/biome-staged.js +0 -0
  98. package/scripts/build-linux-packages.mjs +7 -3
  99. package/scripts/cleanup-test-fixtures.sh +55 -0
  100. package/scripts/context-hydration-hook.mjs +89 -0
  101. package/scripts/demo-smoke.js +285 -0
  102. package/scripts/doctor.js +10 -8
  103. package/scripts/install.sh +33 -4
  104. package/scripts/install.sh.sha256 +1 -0
  105. package/scripts/linux-package-lib.mjs +0 -0
  106. package/scripts/linux-package-smoke.mjs +2 -2
  107. package/scripts/package-size-check.mjs +26 -0
  108. package/scripts/plugin-build.js +314 -0
  109. package/scripts/plugin-publish.js +77 -0
  110. package/scripts/plugin-sync.js +83 -17
  111. package/scripts/prepack.js +9 -0
  112. package/scripts/ralph/prompt.md +0 -0
  113. package/scripts/release-metadata.js +0 -0
  114. package/scripts/release-sync.js +83 -7
  115. package/scripts/release-verify.js +131 -7
  116. package/scripts/setup-npmrc.js +48 -23
  117. package/scripts/skills-install.js +9 -2
  118. package/scripts/skills-manifest.js +2 -21
  119. package/scripts/skills-pack.js +2 -2
  120. package/scripts/skills-validate.js +5 -55
  121. package/skills/align/SKILL.md +0 -0
  122. package/skills/align/agents/openai.yaml +0 -0
  123. package/skills/align/references/shared-language.md +0 -0
  124. package/skills/arch/SKILL.md +0 -0
  125. package/skills/arch/agents/openai.yaml +0 -0
  126. package/skills/build/SKILL.md +0 -0
  127. package/skills/build/agents/openai.yaml +0 -0
  128. package/skills/cleanup/SKILL.md +0 -0
  129. package/skills/cleanup/agents/openai.yaml +0 -0
  130. package/skills/cleanup/references/style-and-deslop.md +0 -0
  131. package/skills/diagnose/SKILL.md +0 -0
  132. package/skills/diagnose/agents/openai.yaml +0 -0
  133. package/skills/flow/SKILL.md +0 -0
  134. package/skills/flow/agents/openai.yaml +0 -0
  135. package/skills/index.json +0 -0
  136. package/skills/maestro/SKILL.md +17 -1
  137. package/skills/maestro/agents/openai.yaml +0 -0
  138. package/skills/maestro/references/core-release-rules.md +2 -2
  139. package/skills/maestro/references/native-ingest-map.md +0 -0
  140. package/skills/sage/SKILL.md +0 -0
  141. package/skills/sage/agents/openai.yaml +0 -0
  142. package/skills/sage/references/source-selection.md +0 -0
  143. package/skills/tdd/SKILL.md +0 -0
  144. package/skills/tdd/agents/openai.yaml +0 -0
  145. package/skills/vet/SKILL.md +0 -0
  146. package/skills/vet/agents/openai.yaml +0 -0
  147. package/skills/vet/references/security-playbooks.md +0 -0
  148. package/skills/vibe/SKILL.md +0 -0
  149. package/skills/vibe/agents/openai.yaml +0 -0
  150. package/sprint/00-idea.md +0 -0
  151. package/sprint/01-architecture.md +0 -0
  152. package/sprint/02-oss-evidence.md +0 -0
  153. package/sprint/03-logic.md +0 -0
  154. package/sprint/04-security.md +0 -0
  155. package/sprint/05-dx-ux.md +0 -0
  156. package/sprint/06-build-plan.md +0 -0
  157. package/sprint/07-release.md +2 -2
  158. package/src/agents.js +281 -0
  159. package/src/bootstrap.js +272 -65
  160. package/src/build-gate.js +0 -0
  161. package/src/codex-app-server.js +291 -0
  162. package/src/decision-log.js +0 -0
  163. package/src/fs-utils.js +175 -4
  164. package/src/launcher.js +26 -23
  165. package/src/mcp-config.js +9 -1
  166. package/src/mcp-live-client.js +141 -8
  167. package/src/paths.js +6 -1
  168. package/src/policy.js +2 -2
  169. package/src/prelaunch.js +223 -0
  170. package/src/process-utils.js +62 -0
  171. package/src/quality/ai-quality-orchestrator.js +328 -0
  172. package/src/release-issue-gates.js +62 -0
  173. package/src/release-operations.js +72 -0
  174. package/src/release-state.js +0 -0
  175. package/src/runtime/active-autonomy-core.js +0 -0
  176. package/src/runtime/agent-compat.js +31 -0
  177. package/src/runtime/alignment-sentinel.js +0 -0
  178. package/src/runtime/architect-review.js +249 -11
  179. package/src/runtime/autonomous-tasks.js +585 -0
  180. package/src/runtime/build-readiness.js +0 -0
  181. package/src/runtime/code-graph-rehearse.js +0 -0
  182. package/src/runtime/codeburn-core.js +118 -0
  183. package/src/runtime/context-authority.js +40 -0
  184. package/src/runtime/context-economy-core.js +40 -0
  185. package/src/runtime/continuity-graph.js +201 -0
  186. package/src/runtime/continuity-notes.js +71 -26
  187. package/src/runtime/core-source-ingest.js +2 -2
  188. package/src/runtime/detached-provider.js +90 -13
  189. package/src/runtime/doctor-report.js +18 -0
  190. package/src/runtime/environment-awareness-core.js +0 -0
  191. package/src/runtime/exposure-catalog.js +0 -0
  192. package/src/runtime/graphify-core.js +167 -0
  193. package/src/runtime/guidance-stack.js +9 -2
  194. package/src/runtime/handoff-packets.js +92 -0
  195. package/src/runtime/headroom-core.js +104 -0
  196. package/src/runtime/helper-orchestration-core.js +0 -0
  197. package/src/runtime/hook-profiles.js +20 -0
  198. package/src/runtime/learning-loop-core.js +110 -4
  199. package/src/runtime/live-agent-verification.js +122 -0
  200. package/src/runtime/maestro-events.js +0 -0
  201. package/src/runtime/maestro-manager.js +0 -0
  202. package/src/runtime/maestro-output.js +58 -0
  203. package/src/runtime/maestro-state.js +0 -0
  204. package/src/runtime/managed-markdown.js +29 -0
  205. package/src/runtime/mcp-authority.js +147 -0
  206. package/src/runtime/mcp-policy.js +0 -0
  207. package/src/runtime/obsidian-integration-core.js +255 -17
  208. package/src/runtime/obsidian-plugin-bridge.js +344 -38
  209. package/src/runtime/orchestrator.js +0 -0
  210. package/src/runtime/pi-maestro-core.js +89 -0
  211. package/src/runtime/preferences.js +79 -0
  212. package/src/runtime/project-context.js +636 -0
  213. package/src/runtime/prompt-strategy-core.js +0 -0
  214. package/src/runtime/quorum-review.js +0 -0
  215. package/src/runtime/ralph-execution-core.js +0 -0
  216. package/src/runtime/redaction-gateway.js +218 -19
  217. package/src/runtime/runtime-state.js +94 -2
  218. package/src/runtime/schema-migrations.js +162 -0
  219. package/src/runtime/semantic-recording-core.js +0 -0
  220. package/src/runtime/signal-hooks.js +13 -0
  221. package/src/runtime/skills-registry-export.js +96 -8
  222. package/src/runtime/startup-path.js +0 -0
  223. package/src/runtime/task-contracts.js +83 -0
  224. package/src/runtime/universal-plugin-broker-core.js +373 -50
  225. package/src/runtime/workspace-intelligence-runtime.js +0 -0
  226. package/src/runtime/workspace-virtualizer.js +0 -0
  227. package/src/runtime/workspaces.js +0 -0
  228. package/src/runtime-artifacts.js +0 -0
  229. package/src/setup-lifecycle.js +359 -0
  230. package/src/skill-frontmatter.js +78 -0
  231. package/src/skill-installer.js +226 -71
  232. package/src/skills.js +309 -31
  233. package/src/state-sync.js +0 -0
  234. package/src/test-fixtures.js +543 -0
  235. package/src/tui/grid.js +67 -0
  236. package/src/tui/status-grid.js +23 -0
  237. package/support-bundle.json +114 -0
  238. package/templates/AGENTS.md +6 -2
  239. package/templates/catalog-manifest.json +0 -0
  240. package/templates/model-instructions/core.md +0 -0
  241. package/templates/model-instructions/release.md +0 -0
  242. package/templates/model-instructions/security.md +0 -0
  243. package/templates/quality/ai-quality-rules.yml +37 -0
  244. package/docs/assets/image/Screenshot(1).png +0 -0
  245. package/docs/assets/image/Screenshot(2).png +0 -0
  246. package/docs/assets/image/Screenshot(3).png +0 -0
  247. package/docs/assets/image/Screenshot(4).png +0 -0
  248. package/docs/assets/image/Screenshot(5).png +0 -0
  249. package/docs/assets/image/Screenshot(6).png +0 -0
  250. package/docs/assets/image/Screenshot(7).png +0 -0
  251. package/docs/assets/image/Screenshot(8).png +0 -0
  252. package/docs/assets/image/Screenshot(9).png +0 -0
  253. package/docs/assets/meta-architect-logo.png +0 -0
  254. package/docs/assets/meta-architect-logo.svg +0 -8
  255. package/docs/onboarding.md +0 -81
  256. package/docs/prompt-guidance-contract.md +0 -17
  257. package/docs/prompt-guidance-fragments/active-autonomy-core.md +0 -7
  258. package/docs/skills-publishing.md +0 -255
  259. package/scripts/postinstall.js +0 -23
@@ -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.1",
4
4
  "description": "Codex-native skills system for architecture, evidence, review, and gated build guidance.",
5
5
  "license": "MIT",
6
6
  "author": "JustineDevs",
@@ -9,6 +9,11 @@
9
9
  "type": "git",
10
10
  "url": "git+https://github.com/JustineDevs/meta-architect.git"
11
11
  },
12
+ "pi": {
13
+ "skills": [
14
+ "./skills"
15
+ ]
16
+ },
12
17
  "bugs": {
13
18
  "url": "https://github.com/JustineDevs/meta-architect/issues"
14
19
  },
@@ -40,9 +45,23 @@
40
45
  "templates/",
41
46
  "sprint/",
42
47
  "skills/",
43
- "docs/",
48
+ "docs/README.md",
49
+ "docs/getting-started.md",
50
+ "docs/skills.md",
51
+ "docs/mcp-setup.md",
52
+ "docs/installed-sdk.md",
53
+ "docs/release-spec.md",
54
+ "docs/quality.md",
55
+ "docs/codex-integration.md",
56
+ "docs/autonomous-tasks.md",
57
+ "docs/vendor-plugin-publishing.md",
58
+ "docs/assets/banner.png",
59
+ "docs/reference/",
60
+ "docs/qa/",
44
61
  "data/",
45
62
  "scripts/",
63
+ "schemas/",
64
+ "support-bundle.json",
46
65
  "index.js",
47
66
  "README.md",
48
67
  "DEMO.md",
@@ -58,8 +77,11 @@
58
77
  },
59
78
  "scripts": {
60
79
  "prepare": "husky",
61
- "postinstall": "node ./scripts/postinstall.js",
62
- "test": "node --test --test-concurrency=1",
80
+ "prepack": "node ./scripts/prepack.js",
81
+ "test": "node --test --test-concurrency=1 test/*.test.js",
82
+ "test:disk": "node --test --test-concurrency=1 test/test-fixtures.test.js",
83
+ "fixtures:cleanup": "bash ./scripts/cleanup-test-fixtures.sh",
84
+ "demo:smoke": "node ./scripts/demo-smoke.js",
63
85
  "status": "node ./bin/ma.js status",
64
86
  "linux:packages:build": "node ./scripts/build-linux-packages.mjs",
65
87
  "linux:packages:smoke": "node ./scripts/linux-package-smoke.mjs",
@@ -69,15 +91,21 @@
69
91
  "release:advance": "node ./scripts/release-sync.js --force --bump patch",
70
92
  "release:verify": "node ./scripts/release-verify.js",
71
93
  "release:assets": "node ./.github/scripts/validate-release-assets.js",
72
- "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",
94
+ "release:assets:generate": "node ./.github/scripts/validate-release-assets.js --generate",
95
+ "release:check": "npm run release:verify && npm run skills:manifest && npm run plugin:sync && npm run plugin:build:all && npm run skills:validate && npm run plugin:verify && npm run skills:pack && npm run check && npm test && npm run pack:inspect",
73
96
  "skills:manifest": "node ./scripts/skills-manifest.js",
74
97
  "skills:validate": "node ./scripts/skills-validate.js",
75
98
  "skills:install": "node ./scripts/skills-install.js",
76
99
  "skills:pack": "node ./scripts/skills-pack.js",
77
100
  "plugin:sync": "node ./scripts/plugin-sync.js",
78
101
  "plugin:verify": "node ./scripts/plugin-sync.js --check",
102
+ "plugin:build": "node ./scripts/plugin-build.js",
103
+ "plugin:build:all": "node ./scripts/plugin-build.js --targets all --output ./dist/vendor-plugins",
104
+ "plugin:publish": "node ./scripts/plugin-publish.js",
79
105
  "pack:inspect": "npm pack --dry-run --ignore-scripts --cache ./.npm-cache",
80
- "doctor": "node ./scripts/doctor.js",
106
+ "package:size": "node ./scripts/package-size-check.mjs",
107
+ "package:doctor": "node ./scripts/doctor.js",
108
+ "release:doctor": "npm run package:doctor",
81
109
  "lint": "biome lint .",
82
110
  "format": "biome format .",
83
111
  "check": "biome check ."
@@ -89,5 +117,8 @@
89
117
  "devDependencies": {
90
118
  "@biomejs/biome": "^2.4.13",
91
119
  "husky": "^9.1.7"
120
+ },
121
+ "dependencies": {
122
+ "@jstn-sdk/agents": "0.1.0"
92
123
  }
93
124
  }
@@ -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.1",
5
5
  "description": "Programmatic architecture and verified engineering skills for Codex-native workflows.",
6
6
  "entry": "./README.md",
7
7
  "skillsDir": "./skills"
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "meta-architect",
3
+ "description": "Meta-Architect gated workflow skills for Claude Code.",
4
+ "version": "0.14.1",
5
+ "author": {
6
+ "name": "JustineDevs",
7
+ "url": "https://github.com/JustineDevs"
8
+ },
9
+ "homepage": "https://github.com/JustineDevs/meta-architect",
10
+ "repository": "https://github.com/JustineDevs/meta-architect.git",
11
+ "license": "MIT"
12
+ }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "meta-architect",
3
- "version": "0.1.13",
3
+ "version": "0.14.1",
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.1",
4
4
  "collections": [
5
5
  "sindresorhus/awesome",
6
6
  "dzharii/awesome-typescript",
@@ -48,11 +48,22 @@ Use the core repo when you want to develop Meta-Architect itself. Use the plugin
48
48
 
49
49
  The plugin-facing bundle should be consumed alongside the repository’s documented packaging/install flow.
50
50
 
51
+ ### Claude Code marketplace
52
+
53
+ This repository is the hosted marketplace. In Claude Code, add it and install the existing plugin:
54
+
55
+ ```text
56
+ /plugin marketplace add JustineDevs/meta-architect
57
+ /plugin install meta-architect@meta-architect
58
+ ```
59
+
60
+ The same plugin can be tested locally with `claude --plugin-dir ./plugins/meta-architect`.
61
+
51
62
  Recommended CLI install for macOS, Linux, WSL, and Git-Bash:
52
63
 
53
64
  ```bash
54
65
  # 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
66
+ 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
67
  ```
57
68
 
58
69
  Canonical package/runtime path:
@@ -138,7 +149,7 @@ When consuming the plugin:
138
149
  The plugin version should track the release scope of the core repo.
139
150
 
140
151
  For this repository:
141
- - plugin scope is aligned to Meta-Architect `v0.1.13`
152
+ - plugin scope is aligned to Meta-Architect `v0.14.1`
142
153
  - any breaking contract change should be versioned intentionally
143
154
 
144
155
  The plugin is one distribution surface of the same product, not a separate product line.
@@ -151,4 +162,5 @@ The plugin is one distribution surface of the same product, not a separate produ
151
162
  - [docs/mcp-setup.md](../../docs/mcp-setup.md)
152
163
  - [.app.json](./.app.json)
153
164
  - [.codex-plugin/plugin.json](./.codex-plugin/plugin.json)
165
+ - [.claude-plugin/plugin.json](./.claude-plugin/plugin.json)
154
166
  - [.mcp.json](./.mcp.json)