@jstn-sdk/ma 0.1.11 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex/agents/Architect.toml +0 -2
- package/.codex/agents/Auditor.toml +0 -2
- package/.codex/agents/Builder.toml +0 -2
- package/.codex/agents/Flow.toml +0 -2
- package/.codex/agents/Sage.toml +0 -2
- package/.codex/agents/Vibe.toml +0 -2
- package/.codex/hooks.json +14 -13
- package/.codex/prompts/enforcement.md +4 -0
- package/.codex/prompts/skill-contract.md +4 -0
- package/COVERAGE.md +211 -0
- package/DEMO.md +265 -0
- package/README.md +287 -37
- package/bin/ma.js +232 -71
- package/data/clone-data.ledger.json +41 -0
- package/data/clone-data.proof.json +50 -0
- package/data/clone-data.rvf +37 -0
- package/docs/README.md +7 -1
- package/docs/getting-started.md +108 -37
- package/docs/installed-sdk.md +23 -0
- package/docs/mcp-setup.md +65 -1
- package/docs/onboarding.md +18 -2
- package/docs/prompt-guidance-contract.md +17 -0
- package/docs/prompt-guidance-fragments/active-autonomy-core.md +7 -0
- package/docs/qa/release-issue-gates-0.1.13.json +644 -0
- package/docs/qa/release-readiness-0.1.13.md +116 -0
- package/docs/qa/release-readiness-0.1.5.md +1 -1
- package/docs/reference/native-engineering-patterns.md +35 -0
- package/docs/reference/native-security-playbooks.md +27 -0
- package/docs/reference/native-source-selection.md +27 -0
- package/docs/reference/native-style-and-deslop.md +20 -0
- package/docs/release-spec.md +37 -10
- package/docs/skills-publishing.md +25 -1
- package/docs/skills.md +37 -12
- package/index.js +222 -2
- package/mcp/collections.json +23 -6
- package/mcp/local/code-intel.js +113 -0
- package/mcp/local/memory.js +46 -0
- package/mcp/local/playbooks.js +168 -0
- package/mcp/local/state.js +71 -0
- package/mcp/local/team-run.js +113 -0
- package/mcp/local/trace.js +60 -0
- package/mcp/local-capabilities.json +56 -0
- package/mcp/native-playbooks.json +117 -0
- package/mcp/servers.json +34 -0
- package/package.json +8 -2
- package/plugins/meta-architect/.app.json +1 -1
- package/plugins/meta-architect/.codex-plugin/plugin.json +4 -4
- package/plugins/meta-architect/.mcp.json +1 -1
- package/plugins/meta-architect/README.md +34 -1
- package/plugins/meta-architect/obsidian/main.js +401 -0
- package/plugins/meta-architect/obsidian/manifest.json +9 -0
- package/plugins/meta-architect/obsidian/styles.css +7 -0
- package/plugins/meta-architect/skills/align/SKILL.md +24 -0
- package/plugins/meta-architect/skills/align/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/align/references/shared-language.md +24 -0
- package/plugins/meta-architect/skills/arch/SKILL.md +2 -0
- package/plugins/meta-architect/skills/build/SKILL.md +3 -0
- package/plugins/meta-architect/skills/cleanup/SKILL.md +23 -0
- package/plugins/meta-architect/skills/cleanup/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/cleanup/references/style-and-deslop.md +18 -0
- package/plugins/meta-architect/skills/diagnose/SKILL.md +24 -0
- package/plugins/meta-architect/skills/diagnose/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/flow/SKILL.md +2 -0
- package/plugins/meta-architect/skills/maestro/SKILL.md +36 -3
- package/plugins/meta-architect/skills/maestro/agents/openai.yaml +2 -2
- package/plugins/meta-architect/skills/maestro/references/native-ingest-map.md +44 -0
- package/plugins/meta-architect/skills/sage/SKILL.md +5 -1
- package/plugins/meta-architect/skills/sage/references/source-selection.md +36 -0
- package/plugins/meta-architect/skills/tdd/SKILL.md +24 -0
- package/plugins/meta-architect/skills/tdd/agents/openai.yaml +4 -0
- package/plugins/meta-architect/skills/vet/SKILL.md +5 -1
- package/plugins/meta-architect/skills/vet/references/security-playbooks.md +30 -0
- package/plugins/meta-architect/skills/vibe/SKILL.md +2 -0
- package/scripts/active-autonomy-hook.mjs +96 -0
- package/scripts/build-linux-packages.mjs +328 -0
- package/scripts/doctor.js +36 -4
- package/scripts/install.sh +28 -0
- package/scripts/linux-package-lib.mjs +40 -0
- package/scripts/linux-package-smoke.mjs +103 -0
- package/scripts/ralph/prompt.md +35 -0
- package/scripts/release-sync.js +13 -6
- package/scripts/release-verify.js +166 -1
- package/skills/align/SKILL.md +24 -0
- package/skills/align/agents/openai.yaml +4 -0
- package/skills/align/references/shared-language.md +24 -0
- package/skills/arch/SKILL.md +2 -0
- package/skills/build/SKILL.md +3 -0
- package/skills/cleanup/SKILL.md +23 -0
- package/skills/cleanup/agents/openai.yaml +4 -0
- package/skills/cleanup/references/style-and-deslop.md +18 -0
- package/skills/diagnose/SKILL.md +24 -0
- package/skills/diagnose/agents/openai.yaml +4 -0
- package/skills/flow/SKILL.md +2 -0
- package/skills/index.json +21 -6
- package/skills/maestro/SKILL.md +36 -3
- package/skills/maestro/agents/openai.yaml +2 -2
- package/skills/maestro/references/native-ingest-map.md +44 -0
- package/skills/sage/SKILL.md +5 -1
- package/skills/sage/references/source-selection.md +36 -0
- package/skills/tdd/SKILL.md +24 -0
- package/skills/tdd/agents/openai.yaml +4 -0
- package/skills/vet/SKILL.md +5 -1
- package/skills/vet/references/security-playbooks.md +30 -0
- package/skills/vibe/SKILL.md +2 -0
- package/src/bootstrap.js +141 -24
- package/src/build-gate.js +2 -2
- package/src/decision-log.js +12 -9
- package/src/launcher.js +4 -0
- package/src/mcp-config.js +130 -8
- package/src/mcp-live-client.js +289 -3
- package/src/paths.js +37 -1
- package/src/policy.js +1 -1
- package/src/release-issue-gates.js +190 -0
- package/src/release-state.js +30 -1
- package/src/runtime/active-autonomy-core.js +208 -0
- package/src/runtime/alignment-sentinel.js +165 -0
- package/src/runtime/architect-review.js +88 -0
- package/src/runtime/build-readiness.js +62 -0
- package/src/runtime/code-graph-rehearse.js +113 -0
- package/src/runtime/context-economy-core.js +276 -0
- package/src/runtime/continuity-notes.js +79 -0
- package/src/runtime/core-source-ingest.js +379 -0
- package/src/runtime/detached-provider.js +74 -0
- package/src/runtime/environment-awareness-core.js +460 -0
- package/src/runtime/exposure-catalog.js +276 -0
- package/src/runtime/guidance-stack.js +42 -0
- package/src/runtime/helper-orchestration-core.js +307 -0
- package/src/runtime/learning-loop-core.js +238 -0
- package/src/runtime/maestro-events.js +18 -0
- package/src/runtime/maestro-manager.js +605 -0
- package/src/runtime/maestro-state.js +125 -0
- package/src/runtime/mcp-policy.js +192 -0
- package/src/runtime/obsidian-integration-core.js +851 -0
- package/src/runtime/obsidian-plugin-bridge.js +739 -0
- package/src/runtime/orchestrator.js +158 -0
- package/src/runtime/prompt-strategy-core.js +230 -0
- package/src/runtime/quorum-review.js +90 -0
- package/src/runtime/ralph-execution-core.js +217 -0
- package/src/runtime/redaction-gateway.js +174 -0
- package/src/runtime/runtime-state.js +1223 -0
- package/src/runtime/semantic-recording-core.js +147 -0
- package/src/runtime/signal-hooks.js +67 -0
- package/src/runtime/skills-registry-export.js +670 -0
- package/src/runtime/startup-path.js +14 -0
- package/src/runtime/universal-plugin-broker-core.js +575 -0
- package/src/runtime/workspace-intelligence-runtime.js +674 -0
- package/src/runtime/workspace-virtualizer.js +102 -0
- package/src/runtime/workspaces.js +25 -0
- package/src/runtime-artifacts.js +407 -84
- package/src/skill-installer.js +53 -5
- package/src/skills.js +1454 -78
- package/src/state-sync.js +51 -8
- package/docs/qa/release-readiness-0.1.11.md +0 -79
- package/plugins/meta-architect/skills/meta-architect/SKILL.md +0 -32
- package/plugins/meta-architect/skills/meta-architect/agents/openai.yaml +0 -4
- package/skills/meta-architect/SKILL.md +0 -32
- package/skills/meta-architect/agents/openai.yaml +0 -4
- /package/plugins/meta-architect/skills/{meta-architect → maestro}/references/core-release-rules.md +0 -0
- /package/skills/{meta-architect → maestro}/references/core-release-rules.md +0 -0
package/bin/ma.js
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
import { runBootstrap, runDoctor } from "../src/bootstrap.js";
|
|
4
|
-
import {
|
|
5
|
-
evaluateBuildGate,
|
|
6
|
-
formatBuildBlockers,
|
|
7
|
-
formatNextAllowedTriggers,
|
|
8
|
-
} from "../src/build-gate.js";
|
|
9
4
|
import { appendDecision } from "../src/decision-log.js";
|
|
10
5
|
import { runCodex, shouldDelegateToCodex } from "../src/launcher.js";
|
|
11
6
|
import {
|
|
@@ -15,7 +10,20 @@ import {
|
|
|
15
10
|
validateReleaseOrigin,
|
|
16
11
|
} from "../src/policy.js";
|
|
17
12
|
import { loadReleaseState } from "../src/release-state.js";
|
|
18
|
-
import {
|
|
13
|
+
import { runExternalArchitectReview } from "../src/runtime/architect-review.js";
|
|
14
|
+
import { evaluateRuntimeBuildReadiness } from "../src/runtime/build-readiness.js";
|
|
15
|
+
import { ingestCoreSources } from "../src/runtime/core-source-ingest.js";
|
|
16
|
+
import {
|
|
17
|
+
appendObsidianOperationReceipt,
|
|
18
|
+
createObsidianNote,
|
|
19
|
+
deleteObsidianNote,
|
|
20
|
+
listObsidianNotes,
|
|
21
|
+
readObsidianNote,
|
|
22
|
+
updateObsidianNote,
|
|
23
|
+
writeObsidianVaultIndex,
|
|
24
|
+
} from "../src/runtime/obsidian-integration-core.js";
|
|
25
|
+
import { installObsidianPlugin } from "../src/runtime/obsidian-plugin-bridge.js";
|
|
26
|
+
import { createRuntimeSummary, loadRuntimeSnapshot } from "../src/runtime/runtime-state.js";
|
|
19
27
|
import {
|
|
20
28
|
ensureSkillsInstalled,
|
|
21
29
|
ensureSupportBundleInstalled,
|
|
@@ -24,6 +32,7 @@ import {
|
|
|
24
32
|
import {
|
|
25
33
|
listSkills,
|
|
26
34
|
runArch,
|
|
35
|
+
runBuildLane,
|
|
27
36
|
runFlow,
|
|
28
37
|
runIdea,
|
|
29
38
|
runInit,
|
|
@@ -43,14 +52,20 @@ function printUsage() {
|
|
|
43
52
|
console.error(" ma init");
|
|
44
53
|
console.error(' ma idea "..."');
|
|
45
54
|
console.error(" ma skills");
|
|
55
|
+
console.error(" ma core-ingest [--refresh]");
|
|
56
|
+
console.error(" ma obsidian-index [vault-path]");
|
|
57
|
+
console.error(
|
|
58
|
+
" ma obsidian list|read|create|update|delete|plugin-install <vault-path> [note-path] [content]",
|
|
59
|
+
);
|
|
46
60
|
console.error(" ma sdk-path");
|
|
47
|
-
console.error(" ma status");
|
|
48
|
-
console.error(" ma
|
|
61
|
+
console.error(" ma status [--maestro-view]");
|
|
62
|
+
console.error(" ma verify --architect");
|
|
63
|
+
console.error(" ma run $maestro|$arch|$sage|$flow|$vet|$vibe|$build [--auto-heal] [--parallel]");
|
|
49
64
|
console.error(" ma merge <source-branch> <target-branch>");
|
|
50
65
|
console.error(" ma release <origin-branch> <target-branch>");
|
|
51
66
|
}
|
|
52
67
|
|
|
53
|
-
function printStatus(releaseState) {
|
|
68
|
+
async function printStatus(releaseState) {
|
|
54
69
|
console.log("Meta-Architect Status");
|
|
55
70
|
console.log("=====================");
|
|
56
71
|
console.log(`Idea: ${releaseState.idea_status}`);
|
|
@@ -61,9 +76,23 @@ function printStatus(releaseState) {
|
|
|
61
76
|
console.log(`Experience: ${releaseState.experience_status}`);
|
|
62
77
|
console.log(`Build: ${releaseState.build_status}`);
|
|
63
78
|
|
|
64
|
-
const
|
|
79
|
+
const runtimeSummary = createRuntimeSummary(await loadRuntimeSnapshot());
|
|
80
|
+
console.log(
|
|
81
|
+
`Core source snapshots: ${runtimeSummary.coreSourceIngestCount} (${runtimeSummary.coreSourceIngestStatus})`,
|
|
82
|
+
);
|
|
83
|
+
console.log(`Obsidian vault notes: ${runtimeSummary.obsidianVaultNoteCount}`);
|
|
84
|
+
console.log(`Obsidian CRUD receipts: ${runtimeSummary.obsidianVaultOperationCount}`);
|
|
85
|
+
if (
|
|
86
|
+
releaseState.build_status === "DONE" &&
|
|
87
|
+
releaseState.merge_status !== "MERGED_TO_DEVELOPMENT"
|
|
88
|
+
) {
|
|
89
|
+
console.log("Next allowed triggers:");
|
|
90
|
+
console.log("ma merge <feature/*> development");
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
const evaluation = evaluateRuntimeBuildReadiness(releaseState, runtimeSummary);
|
|
65
94
|
console.log("Next allowed triggers:");
|
|
66
|
-
const triggers =
|
|
95
|
+
const triggers = evaluation.nextTriggers;
|
|
67
96
|
if (triggers.length === 0) {
|
|
68
97
|
console.log("$build");
|
|
69
98
|
return;
|
|
@@ -74,71 +103,78 @@ function printStatus(releaseState) {
|
|
|
74
103
|
}
|
|
75
104
|
}
|
|
76
105
|
|
|
77
|
-
async function
|
|
78
|
-
const
|
|
106
|
+
async function printMaestroView() {
|
|
107
|
+
const snapshot = await loadRuntimeSnapshot();
|
|
108
|
+
const trackEntries = Object.entries(snapshot.maestroState.runtime_tracks);
|
|
109
|
+
console.log("Maestro View");
|
|
110
|
+
console.log("============");
|
|
111
|
+
console.log(`Global status: ${snapshot.maestroState.global_status}`);
|
|
112
|
+
console.log(`Orchestration id: ${snapshot.maestroState.orchestration_id ?? "not started"}`);
|
|
113
|
+
console.log("Runtime tracks:");
|
|
114
|
+
if (trackEntries.length === 0) {
|
|
115
|
+
console.log("- none");
|
|
116
|
+
} else {
|
|
117
|
+
for (const [trackId, track] of trackEntries) {
|
|
118
|
+
console.log(`- ${trackId}: ${track.active_gate} [${track.status}]`);
|
|
119
|
+
if (Array.isArray(track.blockers) && track.blockers.length > 0) {
|
|
120
|
+
console.log(` blockers: ${track.blockers.join("; ")}`);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
79
124
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
await appendDecision({
|
|
88
|
-
decision: "Blocked build execution",
|
|
89
|
-
status: "BLOCKED",
|
|
90
|
-
evidence: [
|
|
91
|
-
{
|
|
92
|
-
kind: "release-state",
|
|
93
|
-
path: ".ma/release.json",
|
|
94
|
-
},
|
|
95
|
-
],
|
|
96
|
-
blockers,
|
|
97
|
-
next_allowed_triggers: formatNextAllowedTriggers(evaluation),
|
|
98
|
-
});
|
|
125
|
+
const lockEntries = Object.entries(snapshot.maestroState.downstream_lock_table);
|
|
126
|
+
console.log("Downstream locks:");
|
|
127
|
+
if (lockEntries.length === 0) {
|
|
128
|
+
console.log("- none");
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
99
131
|
|
|
132
|
+
for (const [gate, lock] of lockEntries) {
|
|
133
|
+
console.log(`- ${gate}: ${lock.is_locked ? "locked" : "unlocked"}`);
|
|
134
|
+
if (Array.isArray(lock.locked_by) && lock.locked_by.length > 0) {
|
|
135
|
+
console.log(` locked by: ${lock.locked_by.join(", ")}`);
|
|
136
|
+
}
|
|
137
|
+
if (lock.unlock_criteria) {
|
|
138
|
+
console.log(` unlock criteria: ${lock.unlock_criteria}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
async function runBuild() {
|
|
144
|
+
const result = await runBuildLane();
|
|
145
|
+
if (result.status === "BLOCKED") {
|
|
100
146
|
console.error("Build is locked.");
|
|
101
|
-
for (const blocker of blockers) {
|
|
147
|
+
for (const blocker of result.blockers) {
|
|
102
148
|
console.error(`- ${blocker}`);
|
|
103
149
|
}
|
|
104
150
|
process.exitCode = 1;
|
|
105
151
|
return;
|
|
106
152
|
}
|
|
107
153
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
{
|
|
122
|
-
kind: "release-state",
|
|
123
|
-
path: ".ma/release.json",
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
branches: ["feature/ui", "feature/api"],
|
|
127
|
-
},
|
|
128
|
-
],
|
|
129
|
-
blockers: [],
|
|
130
|
-
next_allowed_triggers: ["$build"],
|
|
131
|
-
});
|
|
154
|
+
if (result.status === "READY") {
|
|
155
|
+
const suggestedBranches = result.suggestedBranches ?? [];
|
|
156
|
+
console.log("Build gate is ready.");
|
|
157
|
+
console.log("Suggested branches:");
|
|
158
|
+
for (const branch of suggestedBranches) {
|
|
159
|
+
console.log(`- ${branch}`);
|
|
160
|
+
}
|
|
161
|
+
console.log("Optional worktree commands:");
|
|
162
|
+
console.log("git worktree add ../implementation feature/implementation");
|
|
163
|
+
console.log("git worktree add ../verification feature/verification");
|
|
164
|
+
console.log("Run `ma run '$build'` again to start the bounded build execution substep.");
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
132
167
|
|
|
133
|
-
|
|
168
|
+
if (result.status === "RUNNING") {
|
|
169
|
+
console.log("Build gate is running the bounded execution substep.");
|
|
170
|
+
console.log(
|
|
171
|
+
"Run `ma run '$build'` again to finalize the substep and persist completion evidence.",
|
|
172
|
+
);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
134
175
|
|
|
135
|
-
console.log("Build gate
|
|
136
|
-
console.log("
|
|
137
|
-
console.log(`- ${suggestedBranches[0]}`);
|
|
138
|
-
console.log(`- ${suggestedBranches[1]}`);
|
|
139
|
-
console.log("Optional worktree commands:");
|
|
140
|
-
console.log("git worktree add ../ui feature/ui");
|
|
141
|
-
console.log("git worktree add ../api feature/api");
|
|
176
|
+
console.log("Build gate completed the bounded execution substep.");
|
|
177
|
+
console.log("Next step: ma merge <feature/*> development");
|
|
142
178
|
}
|
|
143
179
|
|
|
144
180
|
async function runMerge(sourceBranch, targetBranch) {
|
|
@@ -149,7 +185,7 @@ async function runMerge(sourceBranch, targetBranch) {
|
|
|
149
185
|
}
|
|
150
186
|
|
|
151
187
|
if (!canMarkBuildDone(releaseState)) {
|
|
152
|
-
throw new Error("Merge is blocked until build status is
|
|
188
|
+
throw new Error("Merge is blocked until build status is DONE");
|
|
153
189
|
}
|
|
154
190
|
|
|
155
191
|
await appendDecision({
|
|
@@ -162,7 +198,6 @@ async function runMerge(sourceBranch, targetBranch) {
|
|
|
162
198
|
});
|
|
163
199
|
|
|
164
200
|
await syncStatusUpdates({
|
|
165
|
-
build_status: "DONE",
|
|
166
201
|
merge_status: "MERGED_TO_DEVELOPMENT",
|
|
167
202
|
});
|
|
168
203
|
|
|
@@ -259,6 +294,111 @@ async function main() {
|
|
|
259
294
|
return;
|
|
260
295
|
}
|
|
261
296
|
|
|
297
|
+
if (command === "core-ingest") {
|
|
298
|
+
await runInit();
|
|
299
|
+
const manifest = await ingestCoreSources({ refresh: rest.includes("--refresh") });
|
|
300
|
+
console.log("Core sources ingested");
|
|
301
|
+
console.log(`Status: ${manifest.status}`);
|
|
302
|
+
console.log(`Runtime fetch required: ${manifest.runtime_fetch_required}`);
|
|
303
|
+
for (const source of manifest.sources) {
|
|
304
|
+
console.log(`${source.id}: ${source.status} ${source.local_path ?? source.repo}`);
|
|
305
|
+
}
|
|
306
|
+
if (manifest.errors?.length > 0) {
|
|
307
|
+
process.exitCode = 1;
|
|
308
|
+
}
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (command === "obsidian-index") {
|
|
313
|
+
const vaultPath = arg ?? process.env.MA_OBSIDIAN_VAULT;
|
|
314
|
+
if (!vaultPath) {
|
|
315
|
+
throw new Error("Obsidian vault path required: ma obsidian-index <vault-path>");
|
|
316
|
+
}
|
|
317
|
+
await runInit();
|
|
318
|
+
const index = await writeObsidianVaultIndex({ vaultPath });
|
|
319
|
+
console.log("Obsidian vault indexed");
|
|
320
|
+
console.log(`Vault: ${index.vault_path}`);
|
|
321
|
+
console.log(`Notes: ${index.note_count}`);
|
|
322
|
+
console.log(`Tags: ${index.tags.length}`);
|
|
323
|
+
console.log(`Unresolved links: ${index.unresolved_links.length}`);
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
if (command === "obsidian") {
|
|
328
|
+
const [action, vaultPath, notePath, ...contentParts] = rest;
|
|
329
|
+
if (!action || !vaultPath) {
|
|
330
|
+
throw new Error(
|
|
331
|
+
"Usage: ma obsidian list|read|create|update|delete|plugin-install <vault-path> [note-path] [content]",
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
await runInit();
|
|
335
|
+
if (action === "plugin-install") {
|
|
336
|
+
const receipt = await installObsidianPlugin({ vaultPath });
|
|
337
|
+
await appendObsidianOperationReceipt({
|
|
338
|
+
record_type: "obsidian_vault_operation",
|
|
339
|
+
operation: "plugin_install",
|
|
340
|
+
records_as: "vault_context",
|
|
341
|
+
build_evidence: false,
|
|
342
|
+
authority_boundary: "$maestro_or_owning_lane",
|
|
343
|
+
vault_path: receipt.vault_path,
|
|
344
|
+
relative_path: ".obsidian/plugins/meta-architect",
|
|
345
|
+
content_sha256: "0".repeat(64),
|
|
346
|
+
char_count: receipt.installed_files.join("\n").length,
|
|
347
|
+
performed_at: new Date().toISOString(),
|
|
348
|
+
});
|
|
349
|
+
console.log("Obsidian plugin installed");
|
|
350
|
+
console.log(`Vault: ${receipt.vault_path}`);
|
|
351
|
+
console.log(`Plugin: ${receipt.plugin_path}`);
|
|
352
|
+
console.log(`Enabled: ${receipt.enabled}`);
|
|
353
|
+
console.log(`Files: ${receipt.installed_files.join(", ")}`);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
if (action === "list") {
|
|
357
|
+
const list = await listObsidianNotes({ vaultPath });
|
|
358
|
+
console.log(`Obsidian notes: ${list.notes.length}`);
|
|
359
|
+
for (const note of list.notes) {
|
|
360
|
+
console.log(note);
|
|
361
|
+
}
|
|
362
|
+
return;
|
|
363
|
+
}
|
|
364
|
+
if (action === "read") {
|
|
365
|
+
const note = await readObsidianNote({ vaultPath, notePath });
|
|
366
|
+
console.log(`Obsidian note: ${note.relative_path}`);
|
|
367
|
+
console.log(note.content);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
if (action === "create") {
|
|
371
|
+
const receipt = await createObsidianNote({
|
|
372
|
+
vaultPath,
|
|
373
|
+
notePath,
|
|
374
|
+
content: contentParts.join(" "),
|
|
375
|
+
});
|
|
376
|
+
await appendObsidianOperationReceipt(receipt);
|
|
377
|
+
await writeObsidianVaultIndex({ vaultPath });
|
|
378
|
+
console.log(`Obsidian note created: ${receipt.relative_path}`);
|
|
379
|
+
return;
|
|
380
|
+
}
|
|
381
|
+
if (action === "update") {
|
|
382
|
+
const receipt = await updateObsidianNote({
|
|
383
|
+
vaultPath,
|
|
384
|
+
notePath,
|
|
385
|
+
content: contentParts.join(" "),
|
|
386
|
+
});
|
|
387
|
+
await appendObsidianOperationReceipt(receipt);
|
|
388
|
+
await writeObsidianVaultIndex({ vaultPath });
|
|
389
|
+
console.log(`Obsidian note updated: ${receipt.relative_path}`);
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
if (action === "delete") {
|
|
393
|
+
const receipt = await deleteObsidianNote({ vaultPath, notePath });
|
|
394
|
+
await appendObsidianOperationReceipt(receipt);
|
|
395
|
+
await writeObsidianVaultIndex({ vaultPath });
|
|
396
|
+
console.log(`Obsidian note deleted: ${receipt.relative_path}`);
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
throw new Error(`Unknown Obsidian action: ${action}`);
|
|
400
|
+
}
|
|
401
|
+
|
|
262
402
|
if (command === "sdk-path") {
|
|
263
403
|
process.stdout.write(`${getSupportBundleRoot()}\n`);
|
|
264
404
|
return;
|
|
@@ -266,7 +406,22 @@ async function main() {
|
|
|
266
406
|
|
|
267
407
|
if (command === "status") {
|
|
268
408
|
const releaseState = await loadReleaseState();
|
|
269
|
-
printStatus(releaseState);
|
|
409
|
+
await printStatus(releaseState);
|
|
410
|
+
if (rest.includes("--maestro-view")) {
|
|
411
|
+
await printMaestroView();
|
|
412
|
+
}
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
if (command === "verify" && rest.includes("--architect")) {
|
|
417
|
+
const review = await runExternalArchitectReview({
|
|
418
|
+
prompt:
|
|
419
|
+
"Review the current Meta-Architect runtime and release-state outputs for architectural soundness.",
|
|
420
|
+
});
|
|
421
|
+
console.log(`Architect verdict: ${review.verdict}`);
|
|
422
|
+
if (review.summary) {
|
|
423
|
+
console.log(review.summary);
|
|
424
|
+
}
|
|
270
425
|
return;
|
|
271
426
|
}
|
|
272
427
|
|
|
@@ -283,14 +438,20 @@ async function main() {
|
|
|
283
438
|
}
|
|
284
439
|
|
|
285
440
|
if (command === "run" && arg === "$maestro") {
|
|
286
|
-
await runMaestro(
|
|
441
|
+
await runMaestro({
|
|
442
|
+
autoHeal: rest.includes("--auto-heal"),
|
|
443
|
+
parallel: rest.includes("--parallel"),
|
|
444
|
+
});
|
|
287
445
|
console.log("$maestro complete");
|
|
288
446
|
return;
|
|
289
447
|
}
|
|
290
448
|
|
|
449
|
+
if (command === "run" && arg === "$meta-architect") {
|
|
450
|
+
throw new Error("$meta-architect has been removed as a separate surface; use $maestro");
|
|
451
|
+
}
|
|
452
|
+
|
|
291
453
|
if (command === "run" && arg === "$build") {
|
|
292
|
-
|
|
293
|
-
await runBuild(releaseState);
|
|
454
|
+
await runBuild();
|
|
294
455
|
return;
|
|
295
456
|
}
|
|
296
457
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"record_type": "clone_data_ledger",
|
|
4
|
+
"product": "Meta-Architect",
|
|
5
|
+
"package": "@jstn-sdk/ma",
|
|
6
|
+
"release_version": "0.1.13",
|
|
7
|
+
"records_as": "production_evidence",
|
|
8
|
+
"build_evidence": true,
|
|
9
|
+
"entries": [
|
|
10
|
+
{
|
|
11
|
+
"id": "clone-data-proof",
|
|
12
|
+
"path": "data/clone-data.proof.json",
|
|
13
|
+
"type": "proof",
|
|
14
|
+
"purpose": "Records the clone-data proof claims and verification commands.",
|
|
15
|
+
"required": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"id": "clone-data-ledger",
|
|
19
|
+
"path": "data/clone-data.ledger.json",
|
|
20
|
+
"type": "ledger",
|
|
21
|
+
"purpose": "Tracks clone-data artifact inventory and package visibility.",
|
|
22
|
+
"required": true
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "clone-data-rvf",
|
|
26
|
+
"path": "data/clone-data.rvf",
|
|
27
|
+
"type": "runtime_verification_file",
|
|
28
|
+
"purpose": "Defines pass/fail verification criteria for clone-data artifacts.",
|
|
29
|
+
"required": true
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
"package_visibility": {
|
|
33
|
+
"package_json_files_entry": "data/",
|
|
34
|
+
"pack_dry_run_required": true
|
|
35
|
+
},
|
|
36
|
+
"integrity_policy": {
|
|
37
|
+
"empty_files_allowed": false,
|
|
38
|
+
"placeholder_claims_allowed": false,
|
|
39
|
+
"must_reference_real_paths": true
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"record_type": "clone_data_proof",
|
|
4
|
+
"product": "Meta-Architect",
|
|
5
|
+
"package": "@jstn-sdk/ma",
|
|
6
|
+
"release_version": "0.1.13",
|
|
7
|
+
"records_as": "production_evidence",
|
|
8
|
+
"build_evidence": true,
|
|
9
|
+
"subject": "clone data install and package proof contract",
|
|
10
|
+
"claims": [
|
|
11
|
+
{
|
|
12
|
+
"id": "jsdelivr_posix_installer",
|
|
13
|
+
"claim": "The recommended POSIX CLI install path is backed by a repository script addressable through jsDelivr.",
|
|
14
|
+
"evidence": [
|
|
15
|
+
"scripts/install.sh",
|
|
16
|
+
"README.md",
|
|
17
|
+
"docs/getting-started.md",
|
|
18
|
+
"docs/onboarding.md",
|
|
19
|
+
"docs/skills.md",
|
|
20
|
+
"plugins/meta-architect/README.md",
|
|
21
|
+
"docs/release-spec.md"
|
|
22
|
+
]
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
"id": "clone_data_artifacts",
|
|
26
|
+
"claim": "Clone-data proof, ledger, and RVF artifacts exist as package-visible data files.",
|
|
27
|
+
"evidence": [
|
|
28
|
+
"data/clone-data.proof.json",
|
|
29
|
+
"data/clone-data.ledger.json",
|
|
30
|
+
"data/clone-data.rvf",
|
|
31
|
+
"package.json files includes data/"
|
|
32
|
+
]
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"id": "release_gate_contract",
|
|
36
|
+
"claim": "Release verification must preserve the jsDelivr installer and canonical npm install command in public install docs.",
|
|
37
|
+
"evidence": ["scripts/release-verify.js", "npm run release:check"]
|
|
38
|
+
}
|
|
39
|
+
],
|
|
40
|
+
"verification_commands": [
|
|
41
|
+
"sh -n scripts/install.sh",
|
|
42
|
+
"node scripts/release-verify.js",
|
|
43
|
+
"node --test test/clone-data-artifacts.test.js",
|
|
44
|
+
"npm run release:check"
|
|
45
|
+
],
|
|
46
|
+
"authority_boundary": {
|
|
47
|
+
"may_mutate_release_state": false,
|
|
48
|
+
"authoritative_changes_return_through": "$maestro_or_owning_lane"
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Clone Data RVF
|
|
2
|
+
|
|
3
|
+
schemaVersion: 1.0.0
|
|
4
|
+
record_type: clone_data_runtime_verification_file
|
|
5
|
+
product: Meta-Architect
|
|
6
|
+
package: @jstn-sdk/ma
|
|
7
|
+
release_version: 0.1.13
|
|
8
|
+
|
|
9
|
+
## Purpose
|
|
10
|
+
|
|
11
|
+
This RVF defines the pass criteria for the clone-data proof and ledger artifacts.
|
|
12
|
+
|
|
13
|
+
## Required Artifacts
|
|
14
|
+
|
|
15
|
+
- `data/clone-data.proof.json`
|
|
16
|
+
- `data/clone-data.ledger.json`
|
|
17
|
+
- `data/clone-data.rvf`
|
|
18
|
+
|
|
19
|
+
## Pass Criteria
|
|
20
|
+
|
|
21
|
+
- Proof JSON has `record_type: clone_data_proof`.
|
|
22
|
+
- Ledger JSON has `record_type: clone_data_ledger`.
|
|
23
|
+
- Both JSON files use `schemaVersion: 1.0.0`.
|
|
24
|
+
- Both JSON files record as `production_evidence`.
|
|
25
|
+
- Ledger entries reference all required clone-data artifacts.
|
|
26
|
+
- `package.json` includes `data/` so clone-data artifacts are visible in package dry-runs.
|
|
27
|
+
- `scripts/install.sh` remains POSIX-shell syntax valid.
|
|
28
|
+
- Public install docs preserve the jsDelivr one-line installer.
|
|
29
|
+
|
|
30
|
+
## Verification Commands
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
sh -n scripts/install.sh
|
|
34
|
+
node scripts/release-verify.js
|
|
35
|
+
node --test test/clone-data-artifacts.test.js
|
|
36
|
+
npm run release:check
|
|
37
|
+
```
|
package/docs/README.md
CHANGED
|
@@ -5,19 +5,25 @@ Meta-Architect documentation is organized by operator task.
|
|
|
5
5
|
## Start here
|
|
6
6
|
|
|
7
7
|
- [Getting Started](./getting-started.md)
|
|
8
|
+
- [Production Demo Guide](../DEMO.md)
|
|
9
|
+
- [Coverage Matrix](../COVERAGE.md)
|
|
8
10
|
- [Release Spec](./release-spec.md)
|
|
9
11
|
- [Skills Reference](./skills.md)
|
|
12
|
+
- umbrella, gated lanes, and helper skill distinctions live in the Skills Reference
|
|
10
13
|
- [Installed Support Bundle](./installed-sdk.md)
|
|
11
14
|
|
|
12
15
|
## Packaging and installation
|
|
13
16
|
|
|
14
17
|
- [Skills Publishing](./skills-publishing.md)
|
|
18
|
+
- published helper-skill and plugin-mirror expectations live in Skills Publishing
|
|
19
|
+
- Linux-native distro package expectations live in the Release Spec and release-readiness docs
|
|
15
20
|
- [MCP Setup](./mcp-setup.md)
|
|
16
21
|
- [Plugin Bundle](../plugins/meta-architect/README.md)
|
|
17
22
|
|
|
18
23
|
## QA and readiness
|
|
19
24
|
|
|
20
|
-
- [Release Readiness 0.1.
|
|
25
|
+
- [Release Readiness 0.1.13](./qa/release-readiness-0.1.13.md)
|
|
26
|
+
- [Release Issue Gates 0.1.13](./qa/release-issue-gates-0.1.13.json)
|
|
21
27
|
|
|
22
28
|
## Repo structure references
|
|
23
29
|
|