@jungjaehoon/mama-os 0.40.0 → 0.41.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.
- package/README.md +2 -2
- package/dist/agent/code-act/host-bridge.d.ts.map +1 -1
- package/dist/agent/code-act/host-bridge.js +0 -22
- package/dist/agent/code-act/host-bridge.js.map +1 -1
- package/dist/agent/gateway-tool-executor.d.ts +6 -7
- package/dist/agent/gateway-tool-executor.d.ts.map +1 -1
- package/dist/agent/gateway-tool-executor.js +38 -76
- package/dist/agent/gateway-tool-executor.js.map +1 -1
- package/dist/agent/gateway-tools.md +1 -3
- package/dist/agent/tool-registry.d.ts.map +1 -1
- package/dist/agent/tool-registry.js +6 -18
- package/dist/agent/tool-registry.js.map +1 -1
- package/dist/agent/types.d.ts +1 -8
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/commands/start.d.ts +45 -52
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +247 -202
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/config/types.d.ts.map +1 -1
- package/dist/cli/config/types.js +0 -2
- package/dist/cli/config/types.js.map +1 -1
- package/dist/cli/runtime/api-routes-init.d.ts +0 -3
- package/dist/cli/runtime/api-routes-init.d.ts.map +1 -1
- package/dist/cli/runtime/api-routes-init.js +8 -32
- package/dist/cli/runtime/api-routes-init.js.map +1 -1
- package/dist/connectors/private-connector-policy.d.ts +1 -3
- package/dist/connectors/private-connector-policy.d.ts.map +1 -1
- package/dist/connectors/private-connector-policy.js +1 -26
- package/dist/connectors/private-connector-policy.js.map +1 -1
- package/dist/gateways/message-router.d.ts.map +1 -1
- package/dist/gateways/message-router.js +2 -3
- package/dist/gateways/message-router.js.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.d.ts +1 -1
- package/dist/multi-agent/dashboard-agent-persona.d.ts.map +1 -1
- package/dist/multi-agent/dashboard-agent-persona.js +6 -7
- package/dist/multi-agent/dashboard-agent-persona.js.map +1 -1
- package/dist/operator/board-pipeline-render.d.ts +17 -0
- package/dist/operator/board-pipeline-render.d.ts.map +1 -0
- package/dist/operator/board-pipeline-render.js +73 -0
- package/dist/operator/board-pipeline-render.js.map +1 -0
- package/dist/operator/board-slot-instructions.d.ts +0 -8
- package/dist/operator/board-slot-instructions.d.ts.map +1 -1
- package/dist/operator/board-slot-instructions.js +3 -37
- package/dist/operator/board-slot-instructions.js.map +1 -1
- package/dist/operator/console-brief.d.ts +1 -1
- package/dist/operator/console-brief.d.ts.map +1 -1
- package/dist/operator/console-brief.js +5 -4
- package/dist/operator/console-brief.js.map +1 -1
- package/dist/operator/owner-event-inbox.d.ts +10 -1
- package/dist/operator/owner-event-inbox.d.ts.map +1 -1
- package/dist/operator/owner-event-inbox.js +22 -6
- package/dist/operator/owner-event-inbox.js.map +1 -1
- package/dist/operator/owner-event-loop.d.ts +4 -2
- package/dist/operator/owner-event-loop.d.ts.map +1 -1
- package/dist/operator/owner-event-loop.js +20 -3
- package/dist/operator/owner-event-loop.js.map +1 -1
- package/dist/operator/owner-event-outcome.d.ts +3 -3
- package/dist/operator/owner-event-outcome.d.ts.map +1 -1
- package/dist/operator/owner-event-outcome.js +66 -9
- package/dist/operator/owner-event-outcome.js.map +1 -1
- package/dist/operator/owner-event-policy.d.ts.map +1 -1
- package/dist/operator/owner-event-policy.js +18 -8
- package/dist/operator/owner-event-policy.js.map +1 -1
- package/dist/operator/owner-event-prompt.d.ts +2 -0
- package/dist/operator/owner-event-prompt.d.ts.map +1 -1
- package/dist/operator/owner-event-prompt.js +14 -5
- package/dist/operator/owner-event-prompt.js.map +1 -1
- package/dist/operator/report-context.d.ts +12 -0
- package/dist/operator/report-context.d.ts.map +1 -1
- package/dist/operator/report-context.js +60 -0
- package/dist/operator/report-context.js.map +1 -1
- package/dist/operator/task-ledger.d.ts +20 -1
- package/dist/operator/task-ledger.d.ts.map +1 -1
- package/dist/operator/task-ledger.js +58 -1
- package/dist/operator/task-ledger.js.map +1 -1
- package/dist/operator/temporal-worker.d.ts +0 -1
- package/dist/operator/temporal-worker.d.ts.map +1 -1
- package/dist/operator/temporal-worker.js +0 -29
- package/dist/operator/temporal-worker.js.map +1 -1
- package/dist/operator/worker-run.d.ts +1 -1
- package/dist/operator/worker-run.d.ts.map +1 -1
- package/dist/operator/worker-run.js +5 -4
- package/dist/operator/worker-run.js.map +1 -1
- package/dist/operator/workorder-consumer.d.ts +18 -2
- package/dist/operator/workorder-consumer.d.ts.map +1 -1
- package/dist/operator/workorder-consumer.js +92 -1
- package/dist/operator/workorder-consumer.js.map +1 -1
- package/dist/operator/workorder-hooks.d.ts +1 -7
- package/dist/operator/workorder-hooks.d.ts.map +1 -1
- package/dist/operator/workorder-hooks.js +1 -5
- package/dist/operator/workorder-hooks.js.map +1 -1
- package/dist/operator/workorder-publishers.d.ts +0 -7
- package/dist/operator/workorder-publishers.d.ts.map +1 -1
- package/dist/operator/workorder-publishers.js +0 -22
- package/dist/operator/workorder-publishers.js.map +1 -1
- package/package.json +1 -1
- package/dist/db/migrations/owner-event-board-refresh.d.ts +0 -10
- package/dist/db/migrations/owner-event-board-refresh.d.ts.map +0 -1
- package/dist/db/migrations/owner-event-board-refresh.js +0 -27
- package/dist/db/migrations/owner-event-board-refresh.js.map +0 -1
- package/dist/operator/briefs.d.ts +0 -50
- package/dist/operator/briefs.d.ts.map +0 -1
- package/dist/operator/briefs.js +0 -451
- package/dist/operator/briefs.js.map +0 -1
- package/dist/operator/owner-event-board-refresh.d.ts +0 -51
- package/dist/operator/owner-event-board-refresh.d.ts.map +0 -1
- package/dist/operator/owner-event-board-refresh.js +0 -260
- package/dist/operator/owner-event-board-refresh.js.map +0 -1
package/dist/operator/briefs.js
DELETED
|
@@ -1,451 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Brief files - the procedural knowledge of the Stage-2 workers.
|
|
4
|
-
*
|
|
5
|
-
* Location: ~/.mama/briefs/brief-<kind>.md - a DEDICATED directory, not
|
|
6
|
-
* ~/.mama/skills/ (plan A5/F5: skills-root flat files leak into the chat
|
|
7
|
-
* system prompt, the skills UI, and PromptEnhancer keyword injection; the
|
|
8
|
-
* consumer reads by path, so loader invisibility is the desired property).
|
|
9
|
-
*
|
|
10
|
-
* Missing brief -> the caller fails the workorder loudly (never a silent
|
|
11
|
-
* skip). Seeding of packaged defaults is ensureBriefs() (S2-T5).
|
|
12
|
-
*/
|
|
13
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
-
exports.briefsDir = briefsDir;
|
|
15
|
-
exports.briefPath = briefPath;
|
|
16
|
-
exports.briefSeedManifestPath = briefSeedManifestPath;
|
|
17
|
-
exports.loadBrief = loadBrief;
|
|
18
|
-
exports.buildDefaultBrief = buildDefaultBrief;
|
|
19
|
-
exports.projectWorkOrderBriefForPrompt = projectWorkOrderBriefForPrompt;
|
|
20
|
-
exports.ensureBriefs = ensureBriefs;
|
|
21
|
-
const node_fs_1 = require("node:fs");
|
|
22
|
-
const node_crypto_1 = require("node:crypto");
|
|
23
|
-
const node_os_1 = require("node:os");
|
|
24
|
-
const node_path_1 = require("node:path");
|
|
25
|
-
const task_ledger_js_1 = require("./task-ledger.js");
|
|
26
|
-
// Persona constants are generic procedure text (no personal content); they
|
|
27
|
-
// relocate INTO this file when the persona modules are deleted at cutover.
|
|
28
|
-
const dashboard_agent_persona_js_1 = require("../multi-agent/dashboard-agent-persona.js");
|
|
29
|
-
const wiki_agent_persona_js_1 = require("../multi-agent/wiki-agent-persona.js");
|
|
30
|
-
const board_slot_instructions_js_1 = require("./board-slot-instructions.js");
|
|
31
|
-
const temporal_worker_js_1 = require("./temporal-worker.js");
|
|
32
|
-
const private_connector_policy_js_1 = require("../connectors/private-connector-policy.js");
|
|
33
|
-
const private_prompt_overlay_js_1 = require("../connectors/private-prompt-overlay.js");
|
|
34
|
-
const LEGACY_PRIVATE_LINES = {
|
|
35
|
-
board: new Set([
|
|
36
|
-
'- kagemusha_tasks({status?}) -- the bridge task board. Statuses are real lifecycle states: pending, in_progress, review, done, completed, cancelled, dismissed. Includes title, priority, deadline, source_room, confirmed.',
|
|
37
|
-
'- kagemusha_overview() -- room/task/message counts for the stat line',
|
|
38
|
-
'- kagemusha_entities({channel?, activeOnly?}) -- list rooms/people with activity stats; find the busiest rooms',
|
|
39
|
-
'- kagemusha_messages({channelId, since?, limit?}) -- read recent raw messages from a room for deltas and evidence',
|
|
40
|
-
"- context_compile({task, connectors?, limit?, max_tool_calls?, strictness?}) -- compile a scoped evidence packet for the board. Trello is external connector evidence and is available only through context_compile; when intentionally isolating Trello, pass connectors: ['trello']. Never treat kagemusha_* as Trello.",
|
|
41
|
-
'- kagemusha_tasks is the read-only project-task truth. task_list/task_create/task_update is YOUR task board (you maintain its data) and the pipeline projection source. Never infer or copy lifecycle status across those stores.',
|
|
42
|
-
'- Never copy Trello or Kagemusha lifecycle status into your task board.',
|
|
43
|
-
'- Project-task completion/progress comes ONLY from kagemusha_tasks. NEVER infer a project task\'s state from message archaeology ("no approval message found" is not a status).',
|
|
44
|
-
'- Never copy Trello or Kagemusha lifecycle status into the native ledger.',
|
|
45
|
-
'1. Read the REAL task state first: kagemusha_tasks({}) for open work, plus kagemusha_tasks({status: "review"}) and kagemusha_tasks({status: "pending"}) slices; kagemusha_overview() for the stat line',
|
|
46
|
-
'2. Gather deltas: kagemusha_entities({activeOnly: true}), then kagemusha_messages({channelId, since}) on the busiest 2-3 rooms (since = ISO timestamp for the last 24-48h) for what changed since the last board',
|
|
47
|
-
'- Use kagemusha_tasks for owner work.',
|
|
48
|
-
]),
|
|
49
|
-
wiki: new Set(),
|
|
50
|
-
'memory-curation': new Set([
|
|
51
|
-
'2. kagemusha_entities({activeOnly: true}) to find the rooms active since the',
|
|
52
|
-
'boundary, then kagemusha_messages({channelId, since: <boundary ISO>}) on',
|
|
53
|
-
'the busiest 3-4 rooms.',
|
|
54
|
-
]),
|
|
55
|
-
temporal: new Set([
|
|
56
|
-
'- Kagemusha is read-only project truth. Do not copy its lifecycle state into the native task.',
|
|
57
|
-
]),
|
|
58
|
-
};
|
|
59
|
-
function briefsDir(homeDir = (0, node_os_1.homedir)()) {
|
|
60
|
-
return (0, node_path_1.join)(homeDir, '.mama', 'briefs');
|
|
61
|
-
}
|
|
62
|
-
function briefPath(kind, homeDir = (0, node_os_1.homedir)()) {
|
|
63
|
-
return (0, node_path_1.join)(briefsDir(homeDir), `brief-${kind}.md`);
|
|
64
|
-
}
|
|
65
|
-
/** Sidecar recording WHICH packaged seed each brief file was written from. */
|
|
66
|
-
function briefSeedManifestPath(homeDir = (0, node_os_1.homedir)()) {
|
|
67
|
-
return (0, node_path_1.join)(briefsDir(homeDir), 'seed-manifest.json');
|
|
68
|
-
}
|
|
69
|
-
/** null = missing (caller fails the workorder); read errors propagate loudly. */
|
|
70
|
-
function loadBrief(kind, homeDir = (0, node_os_1.homedir)()) {
|
|
71
|
-
const path = briefPath(kind, homeDir);
|
|
72
|
-
if (!(0, node_fs_1.existsSync)(path))
|
|
73
|
-
return null;
|
|
74
|
-
return (0, node_fs_1.readFileSync)(path, 'utf-8');
|
|
75
|
-
}
|
|
76
|
-
const stripManagedMarker = (persona) => persona.replace(/^<!-- MAMA managed [^\n]*-->\n*/, '');
|
|
77
|
-
const BOARD_WORKORDER_CONTRACT = `
|
|
78
|
-
## Work order contract (Stage 2)
|
|
79
|
-
This managed contract supersedes any earlier Stage-2 instructions in this brief.
|
|
80
|
-
|
|
81
|
-
Your work order input is a JSON object:
|
|
82
|
-
- mode: "full" | "reconcile"
|
|
83
|
-
- force: true when the owner explicitly requested a fresh board - do NOT reply
|
|
84
|
-
NO_UPDATE; rebuild and publish even if nothing changed.
|
|
85
|
-
- repairGeneration: the host-captured Board repair generation.
|
|
86
|
-
- noUpdateScope: the exact host-authored scope for a full-run no-op.
|
|
87
|
-
- deltaWatermark: host bookkeeping for the scheduler's delta gate. Ignore it.
|
|
88
|
-
- channelKey + deltaLines: present in reconcile mode only.
|
|
89
|
-
- attempts: retry counter (informational).
|
|
90
|
-
|
|
91
|
-
mode "full" = the scheduled board rewrite. Before writing, check whether an
|
|
92
|
-
update is needed: read current open/review task_list rows and their revisions,
|
|
93
|
-
then call task_external_correlation exactly once. For the bounded lifecycle
|
|
94
|
-
candidate set, call context_compile exactly once using exact task/source refs
|
|
95
|
-
and the current run scope. TG-03/TG-04 preserve your semantic judgment and tool
|
|
96
|
-
order; TG-05 forbids per-task history archaeology; TG-06 requires a successful
|
|
97
|
-
task effect before claiming a lifecycle change. If nothing substantive is newer and force is not set,
|
|
98
|
-
call contract_no_update({reason, scope: input.noUpdateScope}) with that exact
|
|
99
|
-
scope when noUpdateScope is present, then respond NO_UPDATE and stop. When
|
|
100
|
-
noUpdateScope is absent, respond NO_UPDATE and stop without calling
|
|
101
|
-
contract_no_update; do not substitute or derive another scope. Otherwise follow
|
|
102
|
-
"How to Write" and publish ALL
|
|
103
|
-
FOUR slots in ONE report_publish({slots: {briefing, action_required, decisions, pipeline}}) call.
|
|
104
|
-
|
|
105
|
-
mode "reconcile" = a single-channel delta reconcile for input.channelKey using
|
|
106
|
-
input.deltaLines. Apply the RECONCILE RUN rules from this brief (the mode
|
|
107
|
-
field replaces the "RECONCILE RUN" message sentinel): judge affected slots,
|
|
108
|
-
publish ONLY those, use task_create/task_update with source_channel and
|
|
109
|
-
source_event_id from the delta, or contract_no_update({reason, scope:
|
|
110
|
-
"reconcile:<channelKey>"}) when nothing is affected. Finish with exactly one
|
|
111
|
-
line: RECONCILED <comma-separated slots or none>.
|
|
112
|
-
|
|
113
|
-
When a reconcile payload contains candidates, they are host-authored immutable
|
|
114
|
-
evidence; deltaLines are only human-readable context. Name every candidate by
|
|
115
|
-
its candidateId and make exactly one candidate-bound decision per candidate:
|
|
116
|
-
use task_external_bind for a binding candidate (choose bind or decline), or
|
|
117
|
-
task_lifecycle_reconcile for a lifecycle candidate (choose apply or retain).
|
|
118
|
-
The available choices are bind/decline/apply/retain. Use your judgment; the
|
|
119
|
-
host does not prescribe an outcome or tool order. You must not use task_update for status or latest_event changes to a candidate task. Do not invent candidates, ids,
|
|
120
|
-
statuses, or evidence. When there are no candidates, preserve ordinary reconcile
|
|
121
|
-
behavior unchanged.
|
|
122
|
-
|
|
123
|
-
Lifecycle policy: verified submission/delivery moves work to review. Pass the
|
|
124
|
-
task revision as expected_revision, the same-run context_packet_id, and one exact
|
|
125
|
-
selected raw review_anchor_ref; the host derives review time and due_at (+14 days).
|
|
126
|
-
Explicit acceptance or success evidence may move work to done. Later same-scope
|
|
127
|
-
feedback/rejection/revision reopens review/done as in_progress; materially new
|
|
128
|
-
scope creates a new task and leaves the submitted scope done. Unmatched or
|
|
129
|
-
ambiguous correlation disables Trello-derived judgment for that task. A partial
|
|
130
|
-
or truncated Trello snapshot forbids only absence-based inference; an exactly
|
|
131
|
-
matched live card in a list you judge terminal remains valid evidence even when
|
|
132
|
-
other lists are truncated. Independent timestamped message evidence may still
|
|
133
|
-
prove a lifecycle event. Never infer completion from Trello absence or arbitrary
|
|
134
|
-
silence. Every mutation writes a plain latest_event
|
|
135
|
-
reason. If evidence is insufficient or conflicting, retain the current state.
|
|
136
|
-
`;
|
|
137
|
-
const MANAGED_BOARD_CONTRACT_START = '<!-- MAMA managed board work-order contract v1:start -->';
|
|
138
|
-
const MANAGED_BOARD_CONTRACT_END = '<!-- MAMA managed board work-order contract v1:end -->';
|
|
139
|
-
const MANAGED_BOARD_WORKORDER_CONTRACT = [
|
|
140
|
-
MANAGED_BOARD_CONTRACT_START,
|
|
141
|
-
BOARD_WORKORDER_CONTRACT.trim(),
|
|
142
|
-
MANAGED_BOARD_CONTRACT_END,
|
|
143
|
-
].join('\n');
|
|
144
|
-
// Exact pre-marker packaged Board contracts, oldest through current. Any edit
|
|
145
|
-
// changes the digest and makes the section user-owned.
|
|
146
|
-
const LEGACY_GENERATED_BOARD_CONTRACT_HASHES = new Set([
|
|
147
|
-
'6fe8700103524238e776a2ec601f079331542c1b213a4e313f7c2939c39c5fd7',
|
|
148
|
-
'f51ea671c34f5963ca9370c5ab2686bbe3a456c0a9fea15c2d35dba0501eaf4d',
|
|
149
|
-
'b94be94db7e0fbb96756f891033b354a64492fd3c73ed9bc687feb63f90b3211',
|
|
150
|
-
'19afbded8c5969899ec855bfc7dbbe9097633d46c009a95587305da43af83356',
|
|
151
|
-
'8bad1ecd6b0214d529d8d4d3b08893d825131cfa8788debba4050b0da32f3404',
|
|
152
|
-
]);
|
|
153
|
-
const LEGACY_GENERATED_BOARD_PIPELINE_HASHES = new Set([
|
|
154
|
-
'a19d0660d7523a27ad6eb53d853521200aa078aa53a6f5c2a255f72bb6ea3a41',
|
|
155
|
-
'f7a94281401301f32cae579c17e9382dbb2161fe5e36952d5765a9ebb143778a',
|
|
156
|
-
'51f8167c881eed88ca490e32179d415dac9dac6f3fa921e66195e80fc645e6b2',
|
|
157
|
-
]);
|
|
158
|
-
const WIKI_WORKORDER_CONTRACT = `
|
|
159
|
-
## Work order contract (Stage 2)
|
|
160
|
-
Your work order input is a JSON object: { batchId, events, attempts }.
|
|
161
|
-
The events array names what triggered this compile (extraction:completed,
|
|
162
|
-
memory:promoted, boot, manual) - provenance only, it carries no content.
|
|
163
|
-
Follow the MANDATORY Workflow exactly; the novelty check decides NO_UPDATE.
|
|
164
|
-
`;
|
|
165
|
-
const PROMOTION_BRIEF = `You are curating durable business memory from recent data (PROMOTION RUN).
|
|
166
|
-
|
|
167
|
-
## Work order contract (Stage 2)
|
|
168
|
-
Your work order input is a JSON object: { scheduledAt, attempts }. Use
|
|
169
|
-
scheduledAt as the current time reference.
|
|
170
|
-
|
|
171
|
-
## Procedure
|
|
172
|
-
1. agent_notices({limit: 100}): find your latest promotion notice (action
|
|
173
|
-
"promoted" or "no_update") and treat it as the boundary; default to the
|
|
174
|
-
last 24h when absent.
|
|
175
|
-
2. Use the business-data readers present in this run's catalog to find active
|
|
176
|
-
channels since the boundary, then inspect the busiest 3-4 channels without
|
|
177
|
-
widening the boundary.
|
|
178
|
-
3. For each candidate judgment, mama_search first to find the existing topic;
|
|
179
|
-
reuse it so the evolution chain stays intact.
|
|
180
|
-
4. Promote at most 5 durable judgments per run via mama_save: pricing/scope
|
|
181
|
-
agreements, standing client preferences, process rules, recurring risk
|
|
182
|
-
patterns. NEVER task lifecycle states, greetings, or logistics. Include
|
|
183
|
-
scopes (the source channel, and the project when identifiable) and
|
|
184
|
-
event_date.
|
|
185
|
-
5. Finish with exactly PROMOTED <n> or NO_UPDATE.
|
|
186
|
-
`;
|
|
187
|
-
function buildDefaultBrief(kind) {
|
|
188
|
-
switch (kind) {
|
|
189
|
-
case 'board':
|
|
190
|
-
return `${stripManagedMarker(dashboard_agent_persona_js_1.DASHBOARD_AGENT_PERSONA)}\n\n${MANAGED_BOARD_WORKORDER_CONTRACT}\n`;
|
|
191
|
-
case 'wiki':
|
|
192
|
-
return `${stripManagedMarker(wiki_agent_persona_js_1.WIKI_AGENT_PERSONA)}\n${WIKI_WORKORDER_CONTRACT}`;
|
|
193
|
-
case 'memory-curation':
|
|
194
|
-
return PROMOTION_BRIEF;
|
|
195
|
-
case 'temporal':
|
|
196
|
-
return (0, temporal_worker_js_1.buildTemporalWorkerBrief)();
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
function stripLegacyPrivateLines(kind, raw) {
|
|
200
|
-
const legacyLines = LEGACY_PRIVATE_LINES[kind];
|
|
201
|
-
const parts = raw.split(/(\r?\n)/);
|
|
202
|
-
let projected = '';
|
|
203
|
-
for (let index = 0; index < parts.length; index += 2) {
|
|
204
|
-
const line = parts[index] ?? '';
|
|
205
|
-
const separator = parts[index + 1] ?? '';
|
|
206
|
-
if (!legacyLines.has(line)) {
|
|
207
|
-
projected += line + separator;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
return projected;
|
|
211
|
-
}
|
|
212
|
-
function openingMarkdownFence(line) {
|
|
213
|
-
const match = /^ {0,3}(`{3,}|~{3,})/.exec(line);
|
|
214
|
-
if (!match?.[1])
|
|
215
|
-
return null;
|
|
216
|
-
return {
|
|
217
|
-
marker: match[1][0],
|
|
218
|
-
length: match[1].length,
|
|
219
|
-
};
|
|
220
|
-
}
|
|
221
|
-
function closesMarkdownFence(line, fence) {
|
|
222
|
-
const marker = fence.marker === '`' ? '\\`' : '~';
|
|
223
|
-
return new RegExp(`^ {0,3}${marker}{${fence.length},}[ \\t]*$`).test(line);
|
|
224
|
-
}
|
|
225
|
-
function findManagedBoardContracts(raw) {
|
|
226
|
-
let fence = null;
|
|
227
|
-
let pending = null;
|
|
228
|
-
const contracts = [];
|
|
229
|
-
let lineStart = 0;
|
|
230
|
-
while (lineStart < raw.length) {
|
|
231
|
-
const newline = raw.indexOf('\n', lineStart);
|
|
232
|
-
const nextLineStart = newline === -1 ? raw.length : newline + 1;
|
|
233
|
-
let contentEnd = newline === -1 ? raw.length : newline;
|
|
234
|
-
if (contentEnd > lineStart && raw[contentEnd - 1] === '\r') {
|
|
235
|
-
contentEnd -= 1;
|
|
236
|
-
}
|
|
237
|
-
const line = raw.slice(lineStart, contentEnd);
|
|
238
|
-
if (fence) {
|
|
239
|
-
if (closesMarkdownFence(line, fence)) {
|
|
240
|
-
fence = null;
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
else {
|
|
244
|
-
const openingFence = openingMarkdownFence(line);
|
|
245
|
-
if (openingFence) {
|
|
246
|
-
fence = openingFence;
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
const start = /^<!-- MAMA managed board work-order contract v(\d+):start -->$/.exec(line);
|
|
250
|
-
if (start?.[1]) {
|
|
251
|
-
pending = { start: lineStart, version: start[1] };
|
|
252
|
-
}
|
|
253
|
-
else if (pending) {
|
|
254
|
-
const end = /^<!-- MAMA managed board work-order contract v(\d+):end -->$/.exec(line);
|
|
255
|
-
if (end?.[1] === pending.version) {
|
|
256
|
-
contracts.push({ start: pending.start, end: contentEnd });
|
|
257
|
-
pending = null;
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
}
|
|
262
|
-
lineStart = nextLineStart;
|
|
263
|
-
}
|
|
264
|
-
return contracts;
|
|
265
|
-
}
|
|
266
|
-
function stripLegacyGeneratedBoardContract(raw) {
|
|
267
|
-
const heading = '## Work order contract (Stage 2)';
|
|
268
|
-
const start = raw.indexOf(heading);
|
|
269
|
-
if (start === -1)
|
|
270
|
-
return raw;
|
|
271
|
-
if (findManagedBoardContracts(raw).some((contract) => start >= contract.start && start <= contract.end)) {
|
|
272
|
-
return raw;
|
|
273
|
-
}
|
|
274
|
-
const nextHeadingOffset = raw.slice(start + heading.length).search(/\n##[ \t]+/);
|
|
275
|
-
const end = nextHeadingOffset === -1 ? raw.length : start + heading.length + nextHeadingOffset + 1;
|
|
276
|
-
const section = raw.slice(start, end);
|
|
277
|
-
const sectionHash = (0, node_crypto_1.createHash)('sha256').update(section.trim(), 'utf8').digest('hex');
|
|
278
|
-
if (!LEGACY_GENERATED_BOARD_CONTRACT_HASHES.has(sectionHash)) {
|
|
279
|
-
return raw;
|
|
280
|
-
}
|
|
281
|
-
return raw.slice(0, start) + raw.slice(end);
|
|
282
|
-
}
|
|
283
|
-
function projectCurrentBoardPipeline(raw) {
|
|
284
|
-
const legacyStart = 'task_list({order: "deadline_priority", limit: 12}) -- the native task ledger is the';
|
|
285
|
-
const start = raw.indexOf(legacyStart);
|
|
286
|
-
if (start === -1)
|
|
287
|
-
return raw;
|
|
288
|
-
const nextHeadingOffset = raw.slice(start).search(/\n##[ \t]+/);
|
|
289
|
-
const end = nextHeadingOffset === -1 ? raw.length : start + nextHeadingOffset + 1;
|
|
290
|
-
const sectionHash = (0, node_crypto_1.createHash)('sha256')
|
|
291
|
-
.update(raw.slice(start, end).trim(), 'utf8')
|
|
292
|
-
.digest('hex');
|
|
293
|
-
const current = `${(0, board_slot_instructions_js_1.buildPipelineTrackerInstructions)().join('\n')}\n\n`;
|
|
294
|
-
if (!LEGACY_GENERATED_BOARD_PIPELINE_HASHES.has(sectionHash)) {
|
|
295
|
-
const before = raw.slice(0, end);
|
|
296
|
-
const separator = end !== raw.length || before.endsWith('\n\n') ? '' : before.endsWith('\n') ? '\n' : '\n\n';
|
|
297
|
-
return before + separator + current + raw.slice(end);
|
|
298
|
-
}
|
|
299
|
-
return raw.slice(0, start) + current + raw.slice(end);
|
|
300
|
-
}
|
|
301
|
-
function projectCurrentBoardContract(raw) {
|
|
302
|
-
const managed = findManagedBoardContracts(raw);
|
|
303
|
-
if (managed.length === 0) {
|
|
304
|
-
const separator = raw.length === 0 ? '' : raw.endsWith('\n\n') ? '' : raw.endsWith('\n') ? '\n' : '\n\n';
|
|
305
|
-
return `${raw}${separator}${MANAGED_BOARD_WORKORDER_CONTRACT}\n`;
|
|
306
|
-
}
|
|
307
|
-
let projected = '';
|
|
308
|
-
let cursor = 0;
|
|
309
|
-
for (const [index, contract] of managed.entries()) {
|
|
310
|
-
projected += raw.slice(cursor, contract.start);
|
|
311
|
-
if (index === 0) {
|
|
312
|
-
projected += MANAGED_BOARD_WORKORDER_CONTRACT;
|
|
313
|
-
}
|
|
314
|
-
cursor = contract.end;
|
|
315
|
-
}
|
|
316
|
-
return projected + raw.slice(cursor);
|
|
317
|
-
}
|
|
318
|
-
/** Project a user-owned work-order brief for one run without changing its file. */
|
|
319
|
-
function projectWorkOrderBriefForPrompt(kind, raw, policy) {
|
|
320
|
-
const overlay = (0, private_prompt_overlay_js_1.buildPrivatePromptOverlay)((0, private_connector_policy_js_1.resolveWorkOrderPrivateSurface)(kind), policy);
|
|
321
|
-
const withoutMarkedOverlay = (0, private_prompt_overlay_js_1.stripMarkedPrivatePromptOverlays)(raw);
|
|
322
|
-
const contracted = kind === 'board'
|
|
323
|
-
? projectCurrentBoardContract(stripLegacyGeneratedBoardContract(projectCurrentBoardPipeline(withoutMarkedOverlay)))
|
|
324
|
-
: withoutMarkedOverlay;
|
|
325
|
-
const projected = (0, private_prompt_overlay_js_1.stripDisabledPrivatePromptRecipes)(stripLegacyPrivateLines(kind, contracted), overlay.length > 0);
|
|
326
|
-
if (!overlay) {
|
|
327
|
-
return projected;
|
|
328
|
-
}
|
|
329
|
-
const separator = projected.endsWith('\n\n') ? '' : projected.endsWith('\n') ? '\n' : '\n\n';
|
|
330
|
-
return `${projected}${separator}${overlay}\n`;
|
|
331
|
-
}
|
|
332
|
-
const SEED_MANIFEST_VERSION = 1;
|
|
333
|
-
function seedHash(text) {
|
|
334
|
-
return (0, node_crypto_1.createHash)('sha256').update(text, 'utf-8').digest('hex');
|
|
335
|
-
}
|
|
336
|
-
/** A manifest we cannot read is treated as absent: every brief is untracked
|
|
337
|
-
* (warn, never overwrite), which is the same safe state a pre-upgrade install
|
|
338
|
-
* is already in. Failing the boot here would strand the whole daemon over a
|
|
339
|
-
* bookkeeping file. */
|
|
340
|
-
function loadSeedManifest(homeDir) {
|
|
341
|
-
const path = briefSeedManifestPath(homeDir);
|
|
342
|
-
if (!(0, node_fs_1.existsSync)(path))
|
|
343
|
-
return { version: SEED_MANIFEST_VERSION, seeds: {}, corrupt: false };
|
|
344
|
-
try {
|
|
345
|
-
const parsed = JSON.parse((0, node_fs_1.readFileSync)(path, 'utf-8'));
|
|
346
|
-
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
|
|
347
|
-
throw new Error('seed manifest is not an object');
|
|
348
|
-
}
|
|
349
|
-
const seeds = parsed.seeds;
|
|
350
|
-
if (typeof seeds !== 'object' || seeds === null || Array.isArray(seeds)) {
|
|
351
|
-
throw new Error('seed manifest has no seeds map');
|
|
352
|
-
}
|
|
353
|
-
const projected = {};
|
|
354
|
-
for (const [kind, hash] of Object.entries(seeds)) {
|
|
355
|
-
if (typeof hash === 'string')
|
|
356
|
-
projected[kind] = hash;
|
|
357
|
-
}
|
|
358
|
-
return { version: SEED_MANIFEST_VERSION, seeds: projected, corrupt: false };
|
|
359
|
-
}
|
|
360
|
-
catch (err) {
|
|
361
|
-
console.warn(`[stage2] unreadable brief seed manifest (${path}); treating every brief as untracked: ` +
|
|
362
|
-
`${err instanceof Error ? err.message : String(err)}`);
|
|
363
|
-
// corrupt: the caller REPLACES the file even when it records nothing new,
|
|
364
|
-
// or tracking stays off forever and this warning repeats on every boot.
|
|
365
|
-
return { version: SEED_MANIFEST_VERSION, seeds: {}, corrupt: true };
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
function writeAtomically(path, content) {
|
|
369
|
-
// tmp+rename (PR bot round): a partial direct write would read as a
|
|
370
|
-
// user-owned brief on the next boot and never be repaired.
|
|
371
|
-
const tmpPath = `${path}.tmp`;
|
|
372
|
-
(0, node_fs_1.writeFileSync)(tmpPath, content, 'utf-8');
|
|
373
|
-
(0, node_fs_1.renameSync)(tmpPath, path);
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Boot seeding (plan B2/C6/E9): write packaged defaults for MISSING briefs, and
|
|
377
|
-
* re-seed briefs the owner never touched.
|
|
378
|
-
*
|
|
379
|
-
* The seed manifest records the hash of the seed each brief was written FROM,
|
|
380
|
-
* which is what separates the two cases the old existsSync guard could not:
|
|
381
|
-
* a file still byte-identical to its recorded seed is ours to upgrade, while
|
|
382
|
-
* any other content is owner-owned and is never overwritten (Stage-3
|
|
383
|
-
* self-improvement substrate). An owner-edited brief whose packaged seed has
|
|
384
|
-
* since moved on gets ONE loud warning per boot so the owner can merge; the
|
|
385
|
-
* recorded hash deliberately stays on the seed they forked from, otherwise the
|
|
386
|
-
* warning would silence itself before the merge happened.
|
|
387
|
-
*
|
|
388
|
-
* A file byte-identical to the CURRENT packaged seed is recorded as such
|
|
389
|
-
* whatever the manifest said, because that record is a statement about the
|
|
390
|
-
* bytes, not a claim about who wrote them. This is what recovers the crash
|
|
391
|
-
* window between the brief write and the manifest write, and it lets a
|
|
392
|
-
* genuinely untouched pre-upgrade brief rejoin tracking.
|
|
393
|
-
*
|
|
394
|
-
* Any OTHER brief with no manifest entry (pre-upgrade install) is never
|
|
395
|
-
* overwritten and never recorded: we cannot tell an old seed from an edited
|
|
396
|
-
* one, so both possible records would be a false claim. The warning names the
|
|
397
|
-
* file and the opt-in (delete it to re-seed).
|
|
398
|
-
*
|
|
399
|
-
* Returns the kinds whose files this call wrote.
|
|
400
|
-
*/
|
|
401
|
-
function ensureBriefs(homeDir = (0, node_os_1.homedir)()) {
|
|
402
|
-
(0, node_fs_1.mkdirSync)(briefsDir(homeDir), { recursive: true });
|
|
403
|
-
const manifest = loadSeedManifest(homeDir);
|
|
404
|
-
const written = [];
|
|
405
|
-
let manifestChanged = manifest.corrupt;
|
|
406
|
-
for (const kind of task_ledger_js_1.WORKORDER_KINDS) {
|
|
407
|
-
const path = briefPath(kind, homeDir);
|
|
408
|
-
const seed = buildDefaultBrief(kind);
|
|
409
|
-
const packagedHash = seedHash(seed);
|
|
410
|
-
if (!(0, node_fs_1.existsSync)(path)) {
|
|
411
|
-
writeAtomically(path, seed);
|
|
412
|
-
manifest.seeds[kind] = packagedHash;
|
|
413
|
-
manifestChanged = true;
|
|
414
|
-
written.push(kind);
|
|
415
|
-
console.log(`[stage2] seeded default brief: ${path}`);
|
|
416
|
-
continue;
|
|
417
|
-
}
|
|
418
|
-
const recordedHash = manifest.seeds[kind];
|
|
419
|
-
if (recordedHash === packagedHash)
|
|
420
|
-
continue;
|
|
421
|
-
const currentHash = seedHash((0, node_fs_1.readFileSync)(path, 'utf-8'));
|
|
422
|
-
if (currentHash === packagedHash) {
|
|
423
|
-
// Already the current seed byte-for-byte: nothing to write, and the
|
|
424
|
-
// record is true regardless of what the manifest claimed before.
|
|
425
|
-
manifest.seeds[kind] = packagedHash;
|
|
426
|
-
manifestChanged = true;
|
|
427
|
-
continue;
|
|
428
|
-
}
|
|
429
|
-
if (recordedHash === undefined) {
|
|
430
|
-
console.warn(`[stage2] brief ${path} predates seed tracking: it will never be upgraded ` +
|
|
431
|
-
`automatically. Delete the file to re-seed it from the packaged default.`);
|
|
432
|
-
continue;
|
|
433
|
-
}
|
|
434
|
-
if (currentHash === recordedHash) {
|
|
435
|
-
writeAtomically(path, seed);
|
|
436
|
-
manifest.seeds[kind] = packagedHash;
|
|
437
|
-
manifestChanged = true;
|
|
438
|
-
written.push(kind);
|
|
439
|
-
console.log(`[stage2] re-seeded untouched brief: ${path}`);
|
|
440
|
-
continue;
|
|
441
|
-
}
|
|
442
|
-
console.warn(`[stage2] brief ${path} is owner-edited and the packaged default has changed. ` +
|
|
443
|
-
`Your edits win - nothing was overwritten - but merge the new packaged brief ` +
|
|
444
|
-
`manually, or delete the file to re-seed it.`);
|
|
445
|
-
}
|
|
446
|
-
if (manifestChanged) {
|
|
447
|
-
writeAtomically(briefSeedManifestPath(homeDir), `${JSON.stringify({ version: SEED_MANIFEST_VERSION, seeds: manifest.seeds }, null, 2)}\n`);
|
|
448
|
-
}
|
|
449
|
-
return written;
|
|
450
|
-
}
|
|
451
|
-
//# sourceMappingURL=briefs.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"briefs.js","sourceRoot":"","sources":["../../src/operator/briefs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import type { SQLiteDatabase } from '../sqlite.js';
|
|
2
|
-
import { type FullRepairCapture } from './board-refresh-gate.js';
|
|
3
|
-
import type { EnqueueWorkOrderInput, WorkOrderRecord } from './task-ledger.js';
|
|
4
|
-
export interface OwnerEventBoardRefreshAcceptance {
|
|
5
|
-
batchId: number;
|
|
6
|
-
batchKey: string;
|
|
7
|
-
repairGeneration: number;
|
|
8
|
-
workOrderId: number;
|
|
9
|
-
appliedAt: number | null;
|
|
10
|
-
}
|
|
11
|
-
export declare const OWNER_EVENT_BOARD_CLAIM_WINDOW_MS: number;
|
|
12
|
-
export interface AttachPendingBoardWorkOptions {
|
|
13
|
-
readyNow?: boolean;
|
|
14
|
-
}
|
|
15
|
-
export interface BoardWorkOrderPort {
|
|
16
|
-
enqueueWorkOrder(order: EnqueueWorkOrderInput): WorkOrderRecord;
|
|
17
|
-
}
|
|
18
|
-
export declare function resolveInitialBoardRepairGeneration(now: number, pendingGeneration: number | null): number;
|
|
19
|
-
/**
|
|
20
|
-
* Durable many-to-one relation between exact owner-event batches and the
|
|
21
|
-
* shared Board repair workorder (TG-06).
|
|
22
|
-
*
|
|
23
|
-
* SQLite owns acceptance. The in-memory set owns only a best-effort wakeup
|
|
24
|
-
* after the current workorder becomes terminal; unapplied rows recover it on
|
|
25
|
-
* the next boot if the process dies in that narrow window.
|
|
26
|
-
*/
|
|
27
|
-
export declare class OwnerEventBoardRefreshLedger {
|
|
28
|
-
private readonly db;
|
|
29
|
-
private readonly taskLedger;
|
|
30
|
-
private readonly clock;
|
|
31
|
-
private readonly postTerminalFollowups;
|
|
32
|
-
constructor(db: SQLiteDatabase, taskLedger: BoardWorkOrderPort, clock?: () => number);
|
|
33
|
-
maxPendingGeneration(): number | null;
|
|
34
|
-
accept(input: {
|
|
35
|
-
batchId: number;
|
|
36
|
-
eventIds: readonly string[];
|
|
37
|
-
repair: FullRepairCapture;
|
|
38
|
-
}): OwnerEventBoardRefreshAcceptance;
|
|
39
|
-
findAcceptance(batchId: number): OwnerEventBoardRefreshAcceptance | null;
|
|
40
|
-
attachPendingToWorkOrder(workOrderId: number, options?: AttachPendingBoardWorkOptions): number;
|
|
41
|
-
markVerified(workOrderId: number, capturedGeneration: number): {
|
|
42
|
-
applied: number;
|
|
43
|
-
followupPending: boolean;
|
|
44
|
-
};
|
|
45
|
-
consumePostTerminalFollowup(workOrderId: number): boolean;
|
|
46
|
-
private readAcceptance;
|
|
47
|
-
private attachPendingToWorkOrderInTransaction;
|
|
48
|
-
private readBoardWorkOrder;
|
|
49
|
-
private assertBoardWorkOrder;
|
|
50
|
-
}
|
|
51
|
-
//# sourceMappingURL=owner-event-board-refresh.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"owner-event-board-refresh.d.ts","sourceRoot":"","sources":["../../src/operator/owner-event-board-refresh.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAA0B,KAAK,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEzF,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAE/E,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAoBD,eAAO,MAAM,iCAAiC,QAAiB,CAAC;AAEhE,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,eAAe,CAAC;CACjE;AAmCD,wBAAgB,mCAAmC,CACjD,GAAG,EAAE,MAAM,EACX,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,MAAM,CAQR;AAED;;;;;;;GAOG;AACH,qBAAa,4BAA4B;IAIrC,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAqB;gBAGxC,EAAE,EAAE,cAAc,EAClB,UAAU,EAAE,kBAAkB,EAC9B,KAAK,GAAE,MAAM,MAAyB;IAKzD,oBAAoB,IAAI,MAAM,GAAG,IAAI;IAWrC,MAAM,CAAC,KAAK,EAAE;QACZ,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;QAC5B,MAAM,EAAE,iBAAiB,CAAC;KAC3B,GAAG,gCAAgC;IA0EpC,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,gCAAgC,GAAG,IAAI;IAKxE,wBAAwB,CACtB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,6BAAkC,GAC1C,MAAM;IAcT,YAAY,CACV,WAAW,EAAE,MAAM,EACnB,kBAAkB,EAAE,MAAM,GACzB;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,OAAO,CAAA;KAAE;IA8ChD,2BAA2B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAKzD,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,qCAAqC;IA0C7C,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,oBAAoB;CAG7B"}
|