youmd 0.9.7 → 0.10.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.
- package/dist/commands/brain.d.ts +25 -0
- package/dist/commands/brain.d.ts.map +1 -0
- package/dist/commands/brain.js +683 -0
- package/dist/commands/brain.js.map +1 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +4 -0
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/machine.d.ts +1 -0
- package/dist/commands/machine.d.ts.map +1 -1
- package/dist/commands/machine.js +52 -4
- package/dist/commands/machine.js.map +1 -1
- package/dist/commands/mine.d.ts +46 -0
- package/dist/commands/mine.d.ts.map +1 -0
- package/dist/commands/mine.js +317 -0
- package/dist/commands/mine.js.map +1 -0
- package/dist/commands/orchestrate.d.ts.map +1 -1
- package/dist/commands/orchestrate.js +37 -3
- package/dist/commands/orchestrate.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +24 -0
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/prompts.d.ts.map +1 -1
- package/dist/commands/prompts.js +5 -2
- package/dist/commands/prompts.js.map +1 -1
- package/dist/commands/remote.d.ts.map +1 -1
- package/dist/commands/remote.js +42 -13
- package/dist/commands/remote.js.map +1 -1
- package/dist/commands/skill.d.ts.map +1 -1
- package/dist/commands/skill.js +2 -0
- package/dist/commands/skill.js.map +1 -1
- package/dist/commands/tasks.d.ts +54 -0
- package/dist/commands/tasks.d.ts.map +1 -0
- package/dist/commands/tasks.js +513 -0
- package/dist/commands/tasks.js.map +1 -0
- package/dist/generated/capability-registry.d.ts +1096 -0
- package/dist/generated/capability-registry.d.ts.map +1 -0
- package/dist/generated/capability-registry.js +1204 -0
- package/dist/generated/capability-registry.js.map +1 -0
- package/dist/index.js +68 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/api.d.ts +76 -0
- package/dist/lib/api.d.ts.map +1 -1
- package/dist/lib/api.js +18 -0
- package/dist/lib/api.js.map +1 -1
- package/dist/lib/brain/adapters.d.ts +34 -0
- package/dist/lib/brain/adapters.d.ts.map +1 -0
- package/dist/lib/brain/adapters.js +362 -0
- package/dist/lib/brain/adapters.js.map +1 -0
- package/dist/lib/brain/apply-control-plane.d.ts +17 -0
- package/dist/lib/brain/apply-control-plane.d.ts.map +1 -0
- package/dist/lib/brain/apply-control-plane.js +117 -0
- package/dist/lib/brain/apply-control-plane.js.map +1 -0
- package/dist/lib/brain/cache.d.ts +25 -0
- package/dist/lib/brain/cache.d.ts.map +1 -0
- package/dist/lib/brain/cache.js +99 -0
- package/dist/lib/brain/cache.js.map +1 -0
- package/dist/lib/brain/canonical.d.ts +5 -0
- package/dist/lib/brain/canonical.d.ts.map +1 -0
- package/dist/lib/brain/canonical.js +38 -0
- package/dist/lib/brain/canonical.js.map +1 -0
- package/dist/lib/brain/discovery.d.ts +9 -0
- package/dist/lib/brain/discovery.d.ts.map +1 -0
- package/dist/lib/brain/discovery.js +560 -0
- package/dist/lib/brain/discovery.js.map +1 -0
- package/dist/lib/brain/index.d.ts +55 -0
- package/dist/lib/brain/index.d.ts.map +1 -0
- package/dist/lib/brain/index.js +384 -0
- package/dist/lib/brain/index.js.map +1 -0
- package/dist/lib/brain/proposal.d.ts +179 -0
- package/dist/lib/brain/proposal.d.ts.map +1 -0
- package/dist/lib/brain/proposal.js +694 -0
- package/dist/lib/brain/proposal.js.map +1 -0
- package/dist/lib/brain/render.d.ts +33 -0
- package/dist/lib/brain/render.d.ts.map +1 -0
- package/dist/lib/brain/render.js +515 -0
- package/dist/lib/brain/render.js.map +1 -0
- package/dist/lib/brain/safe-file.d.ts +110 -0
- package/dist/lib/brain/safe-file.d.ts.map +1 -0
- package/dist/lib/brain/safe-file.js +564 -0
- package/dist/lib/brain/safe-file.js.map +1 -0
- package/dist/lib/brain/safety.d.ts +8 -0
- package/dist/lib/brain/safety.d.ts.map +1 -0
- package/dist/lib/brain/safety.js +42 -0
- package/dist/lib/brain/safety.js.map +1 -0
- package/dist/lib/brain/staged-apply.d.ts +57 -0
- package/dist/lib/brain/staged-apply.d.ts.map +1 -0
- package/dist/lib/brain/staged-apply.js +336 -0
- package/dist/lib/brain/staged-apply.js.map +1 -0
- package/dist/lib/brain/store.d.ts +26 -0
- package/dist/lib/brain/store.d.ts.map +1 -0
- package/dist/lib/brain/store.js +504 -0
- package/dist/lib/brain/store.js.map +1 -0
- package/dist/lib/brain/types.d.ts +160 -0
- package/dist/lib/brain/types.d.ts.map +1 -0
- package/dist/lib/brain/types.js +24 -0
- package/dist/lib/brain/types.js.map +1 -0
- package/dist/lib/config.d.ts +22 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +70 -14
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/daemon.d.ts +27 -0
- package/dist/lib/daemon.d.ts.map +1 -1
- package/dist/lib/daemon.js +57 -0
- package/dist/lib/daemon.js.map +1 -1
- package/dist/lib/machine-identity.d.ts +16 -0
- package/dist/lib/machine-identity.d.ts.map +1 -0
- package/dist/lib/machine-identity.js +101 -0
- package/dist/lib/machine-identity.js.map +1 -0
- package/dist/lib/orchestrator/approvals.d.ts +21 -0
- package/dist/lib/orchestrator/approvals.d.ts.map +1 -0
- package/dist/lib/orchestrator/approvals.js +65 -0
- package/dist/lib/orchestrator/approvals.js.map +1 -0
- package/dist/lib/orchestrator/loop.d.ts +1 -0
- package/dist/lib/orchestrator/loop.d.ts.map +1 -1
- package/dist/lib/orchestrator/loop.js +16 -0
- package/dist/lib/orchestrator/loop.js.map +1 -1
- package/dist/lib/orchestrator/supervisor.d.ts +41 -0
- package/dist/lib/orchestrator/supervisor.d.ts.map +1 -1
- package/dist/lib/orchestrator/supervisor.js +49 -0
- package/dist/lib/orchestrator/supervisor.js.map +1 -1
- package/dist/lib/orchestrator/tools.d.ts +11 -0
- package/dist/lib/orchestrator/tools.d.ts.map +1 -1
- package/dist/lib/orchestrator/tools.js +143 -0
- package/dist/lib/orchestrator/tools.js.map +1 -1
- package/dist/lib/project-strategy.d.ts +38 -0
- package/dist/lib/project-strategy.d.ts.map +1 -1
- package/dist/lib/project-strategy.js +91 -0
- package/dist/lib/project-strategy.js.map +1 -1
- package/dist/lib/projectContext.d.ts +6 -4
- package/dist/lib/projectContext.d.ts.map +1 -1
- package/dist/lib/projectContext.js +19 -17
- package/dist/lib/projectContext.js.map +1 -1
- package/dist/lib/redact.d.ts +15 -0
- package/dist/lib/redact.d.ts.map +1 -0
- package/dist/lib/redact.js +62 -0
- package/dist/lib/redact.js.map +1 -0
- package/dist/lib/tasksFile.d.ts +74 -0
- package/dist/lib/tasksFile.d.ts.map +1 -0
- package/dist/lib/tasksFile.js +502 -0
- package/dist/lib/tasksFile.js.map +1 -0
- package/dist/mcp/registry.d.ts +8 -2
- package/dist/mcp/registry.d.ts.map +1 -1
- package/dist/mcp/registry.js +189 -2
- package/dist/mcp/registry.js.map +1 -1
- package/dist/mcp/server.d.ts +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +3 -2
- package/dist/mcp/server.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,502 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Canonical task ledger: strict project-context/tasks.json plus a deterministic
|
|
4
|
+
* generated tasks.md companion. tasks.json is the only editable truth.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.TasksFileError = exports.TASK_PRIORITIES = exports.TASK_STATUSES = exports.TASKS_SCHEMA = void 0;
|
|
41
|
+
exports.generateTaskId = generateTaskId;
|
|
42
|
+
exports.tasksJsonPath = tasksJsonPath;
|
|
43
|
+
exports.tasksMdPath = tasksMdPath;
|
|
44
|
+
exports.parseTasksJson = parseTasksJson;
|
|
45
|
+
exports.parseLegacyTasksMd = parseLegacyTasksMd;
|
|
46
|
+
exports.renderTasksMd = renderTasksMd;
|
|
47
|
+
exports.assertTasksMdMatches = assertTasksMdMatches;
|
|
48
|
+
exports.reconcileMdCheckboxes = reconcileMdCheckboxes;
|
|
49
|
+
exports.resolveTaskWriteGrant = resolveTaskWriteGrant;
|
|
50
|
+
exports.readTasksDoc = readTasksDoc;
|
|
51
|
+
exports.writeTasksDoc = writeTasksDoc;
|
|
52
|
+
exports.addTask = addTask;
|
|
53
|
+
exports.findTask = findTask;
|
|
54
|
+
exports.openTasks = openTasks;
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
const path = __importStar(require("path"));
|
|
57
|
+
const crypto = __importStar(require("crypto"));
|
|
58
|
+
exports.TASKS_SCHEMA = "you-md/tasks/v1";
|
|
59
|
+
exports.TASK_STATUSES = ["proposed", "open", "in_progress", "done", "snoozed", "cancelled"];
|
|
60
|
+
exports.TASK_PRIORITIES = ["low", "normal", "high", "urgent"];
|
|
61
|
+
class TasksFileError extends Error {
|
|
62
|
+
constructor(code, message) {
|
|
63
|
+
super(`${code}: ${message}`);
|
|
64
|
+
this.code = code;
|
|
65
|
+
this.name = "TasksFileError";
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.TasksFileError = TasksFileError;
|
|
69
|
+
const NOTES_START = "<!-- notes:start -->";
|
|
70
|
+
const NOTES_END = "<!-- notes:end -->";
|
|
71
|
+
const GENERATED_MARKER = "<!-- generated from tasks.json (you-md/tasks/v1). Do not edit;";
|
|
72
|
+
const ID_COMMENT = /<!--\s*id:([A-Za-z0-9_-]+)\s*-->/;
|
|
73
|
+
const TASK_ID = /^t-[A-Za-z0-9][A-Za-z0-9_-]{0,94}$/;
|
|
74
|
+
const PROJECT_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/;
|
|
75
|
+
const PROJECT_REF = /^project:[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/;
|
|
76
|
+
const ARTIFACT_REF = /^artifact:[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?\/[a-z0-9][a-z0-9._-]{0,95}$/;
|
|
77
|
+
const SAFE_RELATIVE_PATH = /^(?!\/)(?![A-Za-z]:)(?!.*\\)(?!.*\/\/)(?!.*(?:^|\/)(?:\.{1,2})(?:\/|$))(?!.*[\u0000-\u001f\u007f])(?!.*\/$)[^/]+(?:\/[^/]+)*$/;
|
|
78
|
+
const OPEN_STATUSES = ["proposed", "open", "in_progress", "snoozed"];
|
|
79
|
+
const DOC_KEYS = new Set(["$schema", "project", "updatedAt", "tasks", "notes"]);
|
|
80
|
+
const TASK_KEYS = new Set([
|
|
81
|
+
"id", "title", "description", "status", "priority", "owner", "ownerLabel", "tags",
|
|
82
|
+
"source", "verify", "createdAt", "updatedAt", "completedAt",
|
|
83
|
+
]);
|
|
84
|
+
function nowIso(now = new Date()) { return now.toISOString(); }
|
|
85
|
+
function isRecord(value) {
|
|
86
|
+
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
87
|
+
}
|
|
88
|
+
function exactIso(value) {
|
|
89
|
+
return typeof value === "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{3})?Z$/.test(value)
|
|
90
|
+
&& Number.isFinite(Date.parse(value));
|
|
91
|
+
}
|
|
92
|
+
function boundedText(value, max, optional = false) {
|
|
93
|
+
if (value === undefined && optional)
|
|
94
|
+
return undefined;
|
|
95
|
+
if (typeof value !== "string" || !value.trim() || value.length > max || /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f]/.test(value))
|
|
96
|
+
return undefined;
|
|
97
|
+
return value;
|
|
98
|
+
}
|
|
99
|
+
function assertNoUnknown(record, allowed, code, where) {
|
|
100
|
+
const unknown = Object.keys(record).filter((key) => !allowed.has(key));
|
|
101
|
+
if (unknown.includes("remoteId"))
|
|
102
|
+
throw new TasksFileError("TASKS_REMOTE_ID_FORBIDDEN", `${where} contains remoteId`);
|
|
103
|
+
if (unknown.length)
|
|
104
|
+
throw new TasksFileError(code, `${where} contains unknown fields: ${unknown.join(", ")}`);
|
|
105
|
+
}
|
|
106
|
+
function generateTaskId(now = new Date()) {
|
|
107
|
+
return `t-${now.toISOString().slice(0, 10).replace(/-/g, "")}-${crypto.randomBytes(3).toString("hex")}`;
|
|
108
|
+
}
|
|
109
|
+
function tasksJsonPath(contextDir) { return path.join(contextDir, "tasks.json"); }
|
|
110
|
+
function tasksMdPath(contextDir) { return path.join(contextDir, "tasks.md"); }
|
|
111
|
+
function parseTask(value, index) {
|
|
112
|
+
if (!isRecord(value))
|
|
113
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}] must be an object`);
|
|
114
|
+
assertNoUnknown(value, TASK_KEYS, "TASKS_INVALID_TASK", `tasks[${index}]`);
|
|
115
|
+
if (typeof value.id !== "string" || !TASK_ID.test(value.id))
|
|
116
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].id is invalid`);
|
|
117
|
+
const title = boundedText(value.title, 240);
|
|
118
|
+
if (!title)
|
|
119
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].title is invalid`);
|
|
120
|
+
if (!exports.TASK_STATUSES.includes(value.status))
|
|
121
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].status is invalid`);
|
|
122
|
+
if (!exports.TASK_PRIORITIES.includes(value.priority))
|
|
123
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].priority is invalid`);
|
|
124
|
+
if (value.owner !== "human" && value.owner !== "agent")
|
|
125
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].owner is invalid`);
|
|
126
|
+
if (!Array.isArray(value.tags) || value.tags.length > 32 || value.tags.some((tag) => typeof tag !== "string" || !/^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/.test(tag))) {
|
|
127
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].tags are invalid`);
|
|
128
|
+
}
|
|
129
|
+
if (new Set(value.tags).size !== value.tags.length)
|
|
130
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].tags must be unique`);
|
|
131
|
+
if (!exactIso(value.createdAt) || !exactIso(value.updatedAt))
|
|
132
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}] timestamps are invalid`);
|
|
133
|
+
if (value.completedAt !== undefined && !exactIso(value.completedAt))
|
|
134
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].completedAt is invalid`);
|
|
135
|
+
if (value.status === "done" && value.completedAt === undefined)
|
|
136
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}] done status requires completedAt`);
|
|
137
|
+
if (value.status !== "done" && value.completedAt !== undefined)
|
|
138
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}] non-done status forbids completedAt`);
|
|
139
|
+
for (const [field, max] of [["description", 10000], ["ownerLabel", 120], ["source", 120], ["verify", 2000]]) {
|
|
140
|
+
if (value[field] !== undefined && !boundedText(value[field], max, true))
|
|
141
|
+
throw new TasksFileError("TASKS_INVALID_TASK", `tasks[${index}].${field} is invalid`);
|
|
142
|
+
}
|
|
143
|
+
return {
|
|
144
|
+
id: value.id,
|
|
145
|
+
title,
|
|
146
|
+
...(value.description !== undefined ? { description: value.description } : {}),
|
|
147
|
+
status: value.status,
|
|
148
|
+
priority: value.priority,
|
|
149
|
+
owner: value.owner,
|
|
150
|
+
...(value.ownerLabel !== undefined ? { ownerLabel: value.ownerLabel } : {}),
|
|
151
|
+
tags: [...value.tags],
|
|
152
|
+
...(value.source !== undefined ? { source: value.source } : {}),
|
|
153
|
+
...(value.verify !== undefined ? { verify: value.verify } : {}),
|
|
154
|
+
createdAt: value.createdAt,
|
|
155
|
+
updatedAt: value.updatedAt,
|
|
156
|
+
...(value.completedAt !== undefined ? { completedAt: value.completedAt } : {}),
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function parseTasksJson(content, expectedProject) {
|
|
160
|
+
let value;
|
|
161
|
+
try {
|
|
162
|
+
value = JSON.parse(content);
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
throw new TasksFileError("TASKS_INVALID_JSON", "tasks.json is not valid JSON");
|
|
166
|
+
}
|
|
167
|
+
if (!isRecord(value))
|
|
168
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", "tasks.json must be an object");
|
|
169
|
+
assertNoUnknown(value, DOC_KEYS, "TASKS_INVALID_DOCUMENT", "tasks.json");
|
|
170
|
+
if (value.$schema !== exports.TASKS_SCHEMA)
|
|
171
|
+
throw new TasksFileError("TASKS_INVALID_SCHEMA", `expected ${exports.TASKS_SCHEMA}`);
|
|
172
|
+
if (typeof value.project !== "string" || !PROJECT_NAME.test(value.project))
|
|
173
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", "project is invalid");
|
|
174
|
+
if (expectedProject && value.project !== expectedProject)
|
|
175
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", `project must equal ${expectedProject}`);
|
|
176
|
+
if (!exactIso(value.updatedAt))
|
|
177
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", "updatedAt is invalid");
|
|
178
|
+
if (!Array.isArray(value.tasks) || value.tasks.length > 10000)
|
|
179
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", "tasks must be an array with at most 10000 rows");
|
|
180
|
+
if (value.notes !== undefined && !boundedText(value.notes, 100000, true))
|
|
181
|
+
throw new TasksFileError("TASKS_INVALID_DOCUMENT", "notes is invalid");
|
|
182
|
+
const tasks = value.tasks.map(parseTask);
|
|
183
|
+
const ids = tasks.map((task) => task.id);
|
|
184
|
+
if (new Set(ids).size !== ids.length)
|
|
185
|
+
throw new TasksFileError("TASKS_DUPLICATE_ID", "task ids must be unique");
|
|
186
|
+
return {
|
|
187
|
+
$schema: exports.TASKS_SCHEMA,
|
|
188
|
+
project: value.project,
|
|
189
|
+
updatedAt: value.updatedAt,
|
|
190
|
+
tasks,
|
|
191
|
+
...(value.notes !== undefined ? { notes: value.notes } : {}),
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/** Legacy import is reviewable in memory; persistence still requires task_write. */
|
|
195
|
+
function parseLegacyTasksMd(content, project) {
|
|
196
|
+
if (content.includes(GENERATED_MARKER) || ID_COMMENT.test(content)) {
|
|
197
|
+
throw new TasksFileError("TASKS_JSON_MISSING", "generated tasks.md exists without canonical tasks.json");
|
|
198
|
+
}
|
|
199
|
+
const tasks = [];
|
|
200
|
+
const timestamp = nowIso();
|
|
201
|
+
const notes = [];
|
|
202
|
+
let inNotes = false;
|
|
203
|
+
for (const line of content.split(/\r?\n/)) {
|
|
204
|
+
const heading = line.match(/^##\s+(.+)$/);
|
|
205
|
+
if (heading) {
|
|
206
|
+
inNotes = /watchpoint|note/i.test(heading[1]);
|
|
207
|
+
if (inNotes)
|
|
208
|
+
notes.push(`### ${heading[1].trim()}`);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (inNotes) {
|
|
212
|
+
if (line.trim())
|
|
213
|
+
notes.push(line);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const bullet = line.match(/^\s*-\s*\[([ xX])\]\s+(.+)$/);
|
|
217
|
+
if (!bullet)
|
|
218
|
+
continue;
|
|
219
|
+
const done = bullet[1].toLowerCase() === "x";
|
|
220
|
+
const text = bullet[2].trim();
|
|
221
|
+
const splitAt = text.length > 160 ? text.indexOf(". ") : -1;
|
|
222
|
+
tasks.push({
|
|
223
|
+
id: generateTaskId(), title: splitAt > 0 ? text.slice(0, splitAt + 1) : text,
|
|
224
|
+
...(splitAt > 0 ? { description: text.slice(splitAt + 2) } : {}),
|
|
225
|
+
status: done ? "done" : "open", priority: "normal", owner: "human", tags: [], source: "legacy-md",
|
|
226
|
+
createdAt: timestamp, updatedAt: timestamp, ...(done ? { completedAt: timestamp } : {}),
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
return { $schema: exports.TASKS_SCHEMA, project, updatedAt: timestamp, tasks, ...(notes.length ? { notes: notes.join("\n") } : {}) };
|
|
230
|
+
}
|
|
231
|
+
function compareTask(a, b) {
|
|
232
|
+
return a.createdAt.localeCompare(b.createdAt) || a.id.localeCompare(b.id);
|
|
233
|
+
}
|
|
234
|
+
function statusLabel(task) {
|
|
235
|
+
const bits = [task.status];
|
|
236
|
+
if (task.priority !== "normal")
|
|
237
|
+
bits.push(task.priority);
|
|
238
|
+
if (task.owner === "agent")
|
|
239
|
+
bits.push(task.ownerLabel ? `agent:${task.ownerLabel}` : "agent");
|
|
240
|
+
if (task.tags.length)
|
|
241
|
+
bits.push(task.tags.map((tag) => `#${tag}`).join(" "));
|
|
242
|
+
return bits.join(" · ");
|
|
243
|
+
}
|
|
244
|
+
function renderTasksMd(doc) {
|
|
245
|
+
const active = doc.tasks.filter((task) => OPEN_STATUSES.includes(task.status)).sort(compareTask);
|
|
246
|
+
const closed = doc.tasks.filter((task) => !OPEN_STATUSES.includes(task.status)).sort(compareTask);
|
|
247
|
+
const lines = [`# Tasks — ${doc.project}`, "", GENERATED_MARKER, " regenerate with `you tasks`; manual changes are rejected. -->", "", `## Active (${active.length})`, ""];
|
|
248
|
+
for (const task of active) {
|
|
249
|
+
lines.push(`- [ ] ${task.title} <!-- id:${task.id} -->`, ` ${statusLabel(task)}`);
|
|
250
|
+
if (task.verify)
|
|
251
|
+
lines.push(` verify: ${task.verify}`);
|
|
252
|
+
if (task.description)
|
|
253
|
+
lines.push(` ${task.description}`);
|
|
254
|
+
}
|
|
255
|
+
lines.push("", `## Done (${closed.length})`, "");
|
|
256
|
+
for (const task of closed)
|
|
257
|
+
lines.push(`- [${task.status === "done" ? "x" : " "}] ${task.title}${task.status === "done" ? "" : ` (${task.status})`} <!-- id:${task.id} -->`);
|
|
258
|
+
lines.push("", NOTES_START, doc.notes || "", NOTES_END, "");
|
|
259
|
+
return lines.join("\n");
|
|
260
|
+
}
|
|
261
|
+
function assertTasksMdMatches(doc, content) {
|
|
262
|
+
if (content !== renderTasksMd(doc))
|
|
263
|
+
throw new TasksFileError("TASKS_MD_DRIFT", "tasks.md differs from deterministic tasks.json rendering");
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Pure migration utility retained for callers that explicitly review a legacy
|
|
267
|
+
* checkbox diff. Canonical reads never call this automatically: generated
|
|
268
|
+
* tasks.md drift is rejected until an approved tasks.json change is written.
|
|
269
|
+
*/
|
|
270
|
+
function reconcileMdCheckboxes(doc, mdContent, now = new Date()) {
|
|
271
|
+
const byId = new Map(doc.tasks.map((task) => [task.id, task]));
|
|
272
|
+
let changed = 0;
|
|
273
|
+
for (const line of mdContent.split(/\r?\n/)) {
|
|
274
|
+
const bullet = line.match(/^\s*-\s*\[([ xX])\]\s+(.+)$/);
|
|
275
|
+
const id = bullet?.[2].match(ID_COMMENT)?.[1];
|
|
276
|
+
const task = id ? byId.get(id) : undefined;
|
|
277
|
+
if (!bullet || !task)
|
|
278
|
+
continue;
|
|
279
|
+
const checked = bullet[1].toLowerCase() === "x";
|
|
280
|
+
if (checked && OPEN_STATUSES.includes(task.status)) {
|
|
281
|
+
task.status = "done";
|
|
282
|
+
task.completedAt = nowIso(now);
|
|
283
|
+
task.updatedAt = nowIso(now);
|
|
284
|
+
changed += 1;
|
|
285
|
+
}
|
|
286
|
+
else if (!checked && task.status === "done") {
|
|
287
|
+
task.status = "open";
|
|
288
|
+
task.completedAt = undefined;
|
|
289
|
+
task.updatedAt = nowIso(now);
|
|
290
|
+
changed += 1;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return changed;
|
|
294
|
+
}
|
|
295
|
+
function findGitRoot(start) {
|
|
296
|
+
let current = path.resolve(start);
|
|
297
|
+
while (true) {
|
|
298
|
+
const marker = path.join(current, ".git");
|
|
299
|
+
if (fs.existsSync(marker))
|
|
300
|
+
return current;
|
|
301
|
+
const parent = path.dirname(current);
|
|
302
|
+
if (parent === current)
|
|
303
|
+
return null;
|
|
304
|
+
current = parent;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function assertNoSymlink(root, candidate) {
|
|
308
|
+
const relative = path.relative(root, candidate);
|
|
309
|
+
if (relative.startsWith("..") || path.isAbsolute(relative))
|
|
310
|
+
throw new TasksFileError("TASKS_SYMLINK_REFUSED", "path escapes repository root");
|
|
311
|
+
let current = root;
|
|
312
|
+
for (const segment of relative.split(path.sep).filter(Boolean)) {
|
|
313
|
+
current = path.join(current, segment);
|
|
314
|
+
let stat;
|
|
315
|
+
try {
|
|
316
|
+
stat = fs.lstatSync(current);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
if (error.code === "ENOENT")
|
|
320
|
+
continue;
|
|
321
|
+
throw error;
|
|
322
|
+
}
|
|
323
|
+
if (stat.isSymbolicLink())
|
|
324
|
+
throw new TasksFileError("TASKS_SYMLINK_REFUSED", `${path.relative(root, current)} is a symlink`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function resolveTaskWriteGrant(contextDir) {
|
|
328
|
+
const repoRoot = findGitRoot(contextDir);
|
|
329
|
+
if (!repoRoot)
|
|
330
|
+
throw new TasksFileError("TASKS_WRITE_NOT_GRANTED", "task writes require a Git repository");
|
|
331
|
+
assertNoSymlink(repoRoot, contextDir);
|
|
332
|
+
const descriptorPath = path.join(repoRoot, ".you-project");
|
|
333
|
+
assertNoSymlink(repoRoot, descriptorPath);
|
|
334
|
+
let descriptor;
|
|
335
|
+
try {
|
|
336
|
+
descriptor = JSON.parse(fs.readFileSync(descriptorPath, "utf8"));
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
throw new TasksFileError("TASKS_WRITE_NOT_GRANTED", "a valid .you-project descriptor is required");
|
|
340
|
+
}
|
|
341
|
+
const writePolicy = isRecord(descriptor) && isRecord(descriptor.writePolicy) ? descriptor.writePolicy : null;
|
|
342
|
+
const taskWrite = writePolicy && isRecord(writePolicy.taskWrite) ? writePolicy.taskWrite : null;
|
|
343
|
+
if (!isRecord(descriptor) || descriptor.schemaVersion !== "you-md/project-brain/v1" || descriptor.kind !== "project"
|
|
344
|
+
|| typeof descriptor.projectRef !== "string" || !PROJECT_REF.test(descriptor.projectRef)
|
|
345
|
+
|| !taskWrite || taskWrite.enabled !== true || typeof taskWrite.artifactRef !== "string"
|
|
346
|
+
|| !ARTIFACT_REF.test(taskWrite.artifactRef) || !Array.isArray(descriptor.artifacts)) {
|
|
347
|
+
throw new TasksFileError("TASKS_WRITE_NOT_GRANTED", ".you-project does not grant task_write");
|
|
348
|
+
}
|
|
349
|
+
const artifact = descriptor.artifacts.find((item) => isRecord(item) && item.artifactRef === taskWrite.artifactRef);
|
|
350
|
+
const artifactPath = path.relative(repoRoot, tasksJsonPath(contextDir)).split(path.sep).join("/");
|
|
351
|
+
if (!isRecord(artifact) || artifact.kind !== "tasks" || artifact.path !== artifactPath || artifact.writePolicy !== "task_write"
|
|
352
|
+
|| artifact.owner !== "repository" || artifact.authority !== "canonical" || !SAFE_RELATIVE_PATH.test(artifactPath)) {
|
|
353
|
+
throw new TasksFileError("TASKS_WRITE_NOT_GRANTED", "task_write is not bound to this canonical tasks.json artifact");
|
|
354
|
+
}
|
|
355
|
+
return { projectRef: descriptor.projectRef, artifactRef: artifact.artifactRef, artifactPath, repoRoot };
|
|
356
|
+
}
|
|
357
|
+
function assertRegularOrMissing(root, filePath) {
|
|
358
|
+
assertNoSymlink(root, filePath);
|
|
359
|
+
try {
|
|
360
|
+
if (!fs.lstatSync(filePath).isFile())
|
|
361
|
+
throw new TasksFileError("TASKS_SYMLINK_REFUSED", `${path.basename(filePath)} is not a regular file`);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
if (error.code !== "ENOENT")
|
|
365
|
+
throw error;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
function writeSynced(filePath, content) {
|
|
369
|
+
const fd = fs.openSync(filePath, "wx", 0o600);
|
|
370
|
+
try {
|
|
371
|
+
fs.writeFileSync(fd, content, "utf8");
|
|
372
|
+
fs.fsyncSync(fd);
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
fs.closeSync(fd);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
function readTasksDoc(contextDir, project) {
|
|
379
|
+
const jsonPath = tasksJsonPath(contextDir);
|
|
380
|
+
const mdPath = tasksMdPath(contextDir);
|
|
381
|
+
const repoRoot = findGitRoot(contextDir) ?? path.resolve(contextDir);
|
|
382
|
+
assertNoSymlink(repoRoot, contextDir);
|
|
383
|
+
assertRegularOrMissing(repoRoot, jsonPath);
|
|
384
|
+
assertRegularOrMissing(repoRoot, mdPath);
|
|
385
|
+
const tmpRoot = path.join(contextDir, ".tmp");
|
|
386
|
+
if (fs.existsSync(tmpRoot) && fs.readdirSync(tmpRoot).some((name) => name.startsWith("youmd-tasks-"))) {
|
|
387
|
+
throw new TasksFileError("TASKS_WRITE_INCOMPLETE", "an interrupted task-ledger transaction requires recovery by the next granted write");
|
|
388
|
+
}
|
|
389
|
+
if (fs.existsSync(jsonPath)) {
|
|
390
|
+
const doc = parseTasksJson(fs.readFileSync(jsonPath, "utf8"), project);
|
|
391
|
+
if (!fs.existsSync(mdPath))
|
|
392
|
+
throw new TasksFileError("TASKS_MD_MISSING", "tasks.md is missing");
|
|
393
|
+
assertTasksMdMatches(doc, fs.readFileSync(mdPath, "utf8"));
|
|
394
|
+
return { doc, migrated: false, reconciled: 0 };
|
|
395
|
+
}
|
|
396
|
+
if (fs.existsSync(mdPath))
|
|
397
|
+
return { doc: parseLegacyTasksMd(fs.readFileSync(mdPath, "utf8"), project), migrated: true, reconciled: 0 };
|
|
398
|
+
return { doc: { $schema: exports.TASKS_SCHEMA, project, updatedAt: nowIso(), tasks: [] }, migrated: false, reconciled: 0 };
|
|
399
|
+
}
|
|
400
|
+
function writeTasksDoc(contextDir, input, options = {}) {
|
|
401
|
+
const grant = resolveTaskWriteGrant(contextDir);
|
|
402
|
+
fs.mkdirSync(contextDir, { recursive: true, mode: 0o755 });
|
|
403
|
+
assertNoSymlink(grant.repoRoot, contextDir);
|
|
404
|
+
const jsonPath = tasksJsonPath(contextDir);
|
|
405
|
+
const mdPath = tasksMdPath(contextDir);
|
|
406
|
+
assertRegularOrMissing(grant.repoRoot, jsonPath);
|
|
407
|
+
assertRegularOrMissing(grant.repoRoot, mdPath);
|
|
408
|
+
const doc = { ...input, updatedAt: nowIso(options.now), tasks: input.tasks.map((task) => ({ ...task, tags: [...task.tags] })) };
|
|
409
|
+
const json = JSON.stringify(doc, null, 2) + "\n";
|
|
410
|
+
const validated = parseTasksJson(json, input.project);
|
|
411
|
+
const markdown = renderTasksMd(validated);
|
|
412
|
+
const tmpRoot = path.join(contextDir, ".tmp");
|
|
413
|
+
assertNoSymlink(grant.repoRoot, tmpRoot);
|
|
414
|
+
fs.mkdirSync(tmpRoot, { recursive: true, mode: 0o700 });
|
|
415
|
+
const lockPath = path.join(tmpRoot, "youmd-tasks-write.lock");
|
|
416
|
+
let lockFd;
|
|
417
|
+
try {
|
|
418
|
+
lockFd = fs.openSync(lockPath, "wx", 0o600);
|
|
419
|
+
}
|
|
420
|
+
catch {
|
|
421
|
+
throw new TasksFileError("TASKS_WRITE_BUSY", "another task-ledger write is active");
|
|
422
|
+
}
|
|
423
|
+
const txn = path.join(tmpRoot, `youmd-tasks-${crypto.randomBytes(8).toString("hex")}`);
|
|
424
|
+
fs.mkdirSync(txn, { mode: 0o700 });
|
|
425
|
+
const newJson = path.join(txn, "tasks.json.new");
|
|
426
|
+
const newMd = path.join(txn, "tasks.md.new");
|
|
427
|
+
const oldJson = path.join(txn, "tasks.json.old");
|
|
428
|
+
const oldMd = path.join(txn, "tasks.md.old");
|
|
429
|
+
const hadJson = fs.existsSync(jsonPath);
|
|
430
|
+
const hadMd = fs.existsSync(mdPath);
|
|
431
|
+
try {
|
|
432
|
+
writeSynced(newJson, json);
|
|
433
|
+
writeSynced(newMd, markdown);
|
|
434
|
+
if (hadJson)
|
|
435
|
+
fs.copyFileSync(jsonPath, oldJson, fs.constants.COPYFILE_EXCL);
|
|
436
|
+
if (hadMd)
|
|
437
|
+
fs.copyFileSync(mdPath, oldMd, fs.constants.COPYFILE_EXCL);
|
|
438
|
+
assertRegularOrMissing(grant.repoRoot, jsonPath);
|
|
439
|
+
assertRegularOrMissing(grant.repoRoot, mdPath);
|
|
440
|
+
fs.renameSync(newJson, jsonPath);
|
|
441
|
+
if (options.faultAfterJson)
|
|
442
|
+
throw new Error("faultAfterJson");
|
|
443
|
+
fs.renameSync(newMd, mdPath);
|
|
444
|
+
fs.chmodSync(jsonPath, 0o644);
|
|
445
|
+
fs.chmodSync(mdPath, 0o644);
|
|
446
|
+
input.updatedAt = validated.updatedAt;
|
|
447
|
+
}
|
|
448
|
+
catch (error) {
|
|
449
|
+
try {
|
|
450
|
+
if (hadJson && fs.existsSync(oldJson))
|
|
451
|
+
fs.copyFileSync(oldJson, jsonPath);
|
|
452
|
+
else if (!hadJson && fs.existsSync(jsonPath))
|
|
453
|
+
fs.unlinkSync(jsonPath);
|
|
454
|
+
if (hadMd && fs.existsSync(oldMd))
|
|
455
|
+
fs.copyFileSync(oldMd, mdPath);
|
|
456
|
+
else if (!hadMd && fs.existsSync(mdPath))
|
|
457
|
+
fs.unlinkSync(mdPath);
|
|
458
|
+
}
|
|
459
|
+
catch {
|
|
460
|
+
throw new TasksFileError("TASKS_WRITE_INCOMPLETE", "task-ledger rollback failed; manual recovery required");
|
|
461
|
+
}
|
|
462
|
+
throw error;
|
|
463
|
+
}
|
|
464
|
+
finally {
|
|
465
|
+
try {
|
|
466
|
+
fs.rmSync(txn, { recursive: true, force: true });
|
|
467
|
+
}
|
|
468
|
+
catch { /* surfaced on next read */ }
|
|
469
|
+
try {
|
|
470
|
+
fs.closeSync(lockFd);
|
|
471
|
+
}
|
|
472
|
+
catch { /* no-op */ }
|
|
473
|
+
try {
|
|
474
|
+
fs.unlinkSync(lockPath);
|
|
475
|
+
}
|
|
476
|
+
catch { /* no-op */ }
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
function addTask(doc, input) {
|
|
480
|
+
const timestamp = nowIso();
|
|
481
|
+
const status = input.status ?? "open";
|
|
482
|
+
const task = {
|
|
483
|
+
id: input.id ?? generateTaskId(), title: input.title.trim(), ...(input.description ? { description: input.description } : {}),
|
|
484
|
+
status, priority: input.priority ?? "normal", owner: input.owner ?? "human", ...(input.ownerLabel ? { ownerLabel: input.ownerLabel } : {}),
|
|
485
|
+
tags: [...(input.tags ?? [])], ...(input.source ? { source: input.source } : {}), ...(input.verify ? { verify: input.verify } : {}),
|
|
486
|
+
createdAt: input.createdAt ?? timestamp, updatedAt: timestamp,
|
|
487
|
+
...(status === "done" ? { completedAt: input.completedAt ?? timestamp } : {}),
|
|
488
|
+
};
|
|
489
|
+
parseTask(task, doc.tasks.length);
|
|
490
|
+
if (doc.tasks.some((existing) => existing.id === task.id))
|
|
491
|
+
throw new TasksFileError("TASKS_DUPLICATE_ID", `duplicate task id ${task.id}`);
|
|
492
|
+
doc.tasks.push(task);
|
|
493
|
+
return task;
|
|
494
|
+
}
|
|
495
|
+
function findTask(doc, idOrTitle) {
|
|
496
|
+
const needle = idOrTitle.trim().toLowerCase();
|
|
497
|
+
return doc.tasks.find((task) => task.id.toLowerCase() === needle)
|
|
498
|
+
|| doc.tasks.find((task) => task.title.toLowerCase() === needle)
|
|
499
|
+
|| doc.tasks.find((task) => task.title.toLowerCase().includes(needle));
|
|
500
|
+
}
|
|
501
|
+
function openTasks(doc) { return doc.tasks.filter((task) => OPEN_STATUSES.includes(task.status)); }
|
|
502
|
+
//# sourceMappingURL=tasksFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tasksFile.js","sourceRoot":"","sources":["../../src/lib/tasksFile.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/registry.d.ts
CHANGED
|
@@ -11,13 +11,14 @@
|
|
|
11
11
|
*
|
|
12
12
|
* ─── MIGRATION STATUS ───────────────────────────────────────────────────────
|
|
13
13
|
*
|
|
14
|
-
* MIGRATED (
|
|
14
|
+
* MIGRATED (29 tools):
|
|
15
15
|
* whoami — local bundle read, no auth required
|
|
16
16
|
* get_identity — local bundle read, compact/full/json/markdown
|
|
17
17
|
* list_skills — pure local dir scan
|
|
18
18
|
* list_projects — pure local dir scan
|
|
19
19
|
* get_section — local bundle file read
|
|
20
20
|
* get_project_context — local project-context engine, no network
|
|
21
|
+
* get_project_brain — provenance-aware local/synced project brain read
|
|
21
22
|
* get_stack_manifest — local youstack.json parse
|
|
22
23
|
* get_stack_capabilities — local youstack.json capability map
|
|
23
24
|
* route_stack_request — local routing algorithm, no network
|
|
@@ -34,9 +35,14 @@
|
|
|
34
35
|
* upsert_portfolio_task — authenticated write via ctx.apiRequest
|
|
35
36
|
* update_portfolio_task — authenticated task triage via ctx.apiRequest
|
|
36
37
|
* hydrate_portfolio_graph — authenticated portfolio hydration via ctx.apiRequest
|
|
38
|
+
* upsert_portfolio_project — authenticated project catalog write via ctx.apiRequest
|
|
37
39
|
* record_brain_dump — authenticated write via ctx.apiRequest
|
|
40
|
+
* remote_machine_status — trusted-device machine status read
|
|
41
|
+
* remote_machine_run — whitelisted trusted-device command dispatch
|
|
42
|
+
* store_media — folder.md-backed media upload
|
|
43
|
+
* get_media — folder.md-backed media download
|
|
38
44
|
*
|
|
39
|
-
* DEFERRED (
|
|
45
|
+
* DEFERRED (6 tools — write-ops and dynamic-import tools):
|
|
40
46
|
* get_agent_brief — >50 lines; delegates to buildAgentBrief() in server.ts
|
|
41
47
|
* which has a deep async call-tree; keep in switch.
|
|
42
48
|
* update_section — fs write; intentionally deferred (write-ops last)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/mcp/registry.ts"],"names":[],"mappings":"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"}
|