mister-wolf 1.1.0 → 2.0.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/dist/adapters/cli/cli-entry.d.ts.map +1 -1
- package/dist/adapters/cli/cli-entry.js +2 -0
- package/dist/adapters/cli/cli-entry.js.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-complain.js +41 -17
- package/dist/adapters/cli/commands/memory-complain.js.map +1 -1
- package/dist/adapters/cli/commands/memory-init.d.ts +21 -0
- package/dist/adapters/cli/commands/memory-init.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-init.js +165 -19
- package/dist/adapters/cli/commands/memory-init.js.map +1 -1
- package/dist/adapters/cli/commands/memory-search.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-search.js +8 -0
- package/dist/adapters/cli/commands/memory-search.js.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.d.ts.map +1 -1
- package/dist/adapters/cli/commands/memory-sync.js +9 -1
- package/dist/adapters/cli/commands/memory-sync.js.map +1 -1
- package/dist/adapters/cli/commands/memory-update.d.ts +3 -0
- package/dist/adapters/cli/commands/memory-update.d.ts.map +1 -0
- package/dist/adapters/cli/commands/memory-update.js +105 -0
- package/dist/adapters/cli/commands/memory-update.js.map +1 -0
- package/dist/adapters/mcp/mcp-schemas.d.ts +1 -1
- package/dist/adapters/mcp/mcp-schemas.d.ts.map +1 -1
- package/dist/adapters/mcp/mcp-schemas.js +8 -2
- package/dist/adapters/mcp/mcp-schemas.js.map +1 -1
- package/dist/adapters/mcp/mcp-tools.d.ts.map +1 -1
- package/dist/adapters/mcp/mcp-tools.js +10 -8
- package/dist/adapters/mcp/mcp-tools.js.map +1 -1
- package/dist/adapters/platforms/claude-adapter.d.ts +2 -2
- package/dist/adapters/platforms/claude-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/claude-adapter.js +2 -2
- package/dist/adapters/platforms/claude-adapter.js.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.d.ts +4 -2
- package/dist/adapters/platforms/opencode-adapter.d.ts.map +1 -1
- package/dist/adapters/platforms/opencode-adapter.js +16 -4
- package/dist/adapters/platforms/opencode-adapter.js.map +1 -1
- package/dist/adapters/render/manifest.d.ts +2 -1
- package/dist/adapters/render/manifest.d.ts.map +1 -1
- package/dist/adapters/render/manifest.js +13 -2
- package/dist/adapters/render/manifest.js.map +1 -1
- package/dist/adapters/render/opencode/opencode-renderer.d.ts +10 -3
- package/dist/adapters/render/opencode/opencode-renderer.d.ts.map +1 -1
- package/dist/adapters/render/opencode/opencode-renderer.js +88 -15
- package/dist/adapters/render/opencode/opencode-renderer.js.map +1 -1
- package/dist/adapters/sqlite/sqlite-search-index.d.ts +10 -1
- package/dist/adapters/sqlite/sqlite-search-index.d.ts.map +1 -1
- package/dist/adapters/sqlite/sqlite-search-index.js +48 -10
- package/dist/adapters/sqlite/sqlite-search-index.js.map +1 -1
- package/dist/app/use-cases/bootstrap-project.d.ts +4 -2
- package/dist/app/use-cases/bootstrap-project.d.ts.map +1 -1
- package/dist/app/use-cases/bootstrap-project.js +29 -8
- package/dist/app/use-cases/bootstrap-project.js.map +1 -1
- package/dist/app/use-cases/generate-recap.d.ts +8 -0
- package/dist/app/use-cases/generate-recap.d.ts.map +1 -1
- package/dist/app/use-cases/generate-recap.js +34 -1
- package/dist/app/use-cases/generate-recap.js.map +1 -1
- package/dist/app/use-cases/get-call-injections.d.ts.map +1 -1
- package/dist/app/use-cases/get-call-injections.js +7 -3
- package/dist/app/use-cases/get-call-injections.js.map +1 -1
- package/dist/app/use-cases/init-project.d.ts +47 -11
- package/dist/app/use-cases/init-project.d.ts.map +1 -1
- package/dist/app/use-cases/init-project.js +128 -33
- package/dist/app/use-cases/init-project.js.map +1 -1
- package/dist/app/use-cases/model-routing.d.ts +30 -0
- package/dist/app/use-cases/model-routing.d.ts.map +1 -0
- package/dist/app/use-cases/model-routing.js +39 -0
- package/dist/app/use-cases/model-routing.js.map +1 -0
- package/dist/app/use-cases/sync-base-set.d.ts +3 -2
- package/dist/app/use-cases/sync-base-set.d.ts.map +1 -1
- package/dist/app/use-cases/sync-base-set.js +3 -2
- package/dist/app/use-cases/sync-base-set.js.map +1 -1
- package/dist/domain/governance.d.ts.map +1 -1
- package/dist/domain/governance.js +4 -2
- package/dist/domain/governance.js.map +1 -1
- package/dist/domain/memory-types.d.ts +45 -1
- package/dist/domain/memory-types.d.ts.map +1 -1
- package/dist/domain/memory-types.js +20 -0
- package/dist/domain/memory-types.js.map +1 -1
- package/dist/domain/schemas/article-schema.d.ts +1 -1
- package/dist/domain/schemas/blocker-schema.d.ts +1 -1
- package/dist/domain/schemas/decision-schema.d.ts +1 -1
- package/dist/domain/schemas/info-request-schema.d.ts +1 -1
- package/dist/domain/schemas/rule-schema.d.ts +1 -1
- package/dist/domain/schemas/session-checkpoint-schema.d.ts +1 -1
- package/dist/domain/schemas/thread-schema.d.ts +1 -1
- package/dist/domain/type-schema-builder.d.ts +11 -2
- package/dist/domain/type-schema-builder.d.ts.map +1 -1
- package/dist/domain/type-schema-builder.js +41 -0
- package/dist/domain/type-schema-builder.js.map +1 -1
- package/dist/ports/base-set-renderer.port.d.ts +18 -4
- package/dist/ports/base-set-renderer.port.d.ts.map +1 -1
- package/dist/ports/platform-adapter.port.d.ts +7 -1
- package/dist/ports/platform-adapter.port.d.ts.map +1 -1
- package/package.json +1 -6
- package/templates/base/AGENTS.md +28 -0
- package/templates/base/agents/executor-lead.md +24 -7
- package/templates/base/agents/mr-wolf.md +20 -7
- package/templates/base/agents/steward.md +5 -1
- package/templates/base/agents/worker-implementer.md +7 -6
- package/templates/base/agents/worker-researcher.md +7 -6
- package/templates/base/agents/worker-reviewer.md +7 -6
- package/templates/base/commands/complain.md +6 -6
- package/templates/base/playbooks/complaint-protocol.md +97 -24
- package/templates/base/playbooks/steward-nastavnik.md +5 -3
- package/templates/base/playbooks/worker-implementer-playbook.md +16 -8
- package/templates/base/playbooks/worker-researcher-playbook.md +15 -7
- package/templates/base/playbooks/worker-reviewer-playbook.md +14 -7
|
@@ -3,6 +3,10 @@ import { finalScore } from '../../domain/solve/relevance.js';
|
|
|
3
3
|
function formatBlock(obj) {
|
|
4
4
|
return `- [${obj.id}] ${obj.title} (${obj.confidence}, ${obj.updated_at})\n source: ${obj.id}`;
|
|
5
5
|
}
|
|
6
|
+
/** Машино-состояние (routing-объект моделей) — не руководство для агента: в инъекции никогда. */
|
|
7
|
+
function isMachineState(obj) {
|
|
8
|
+
return Array.isArray(obj.tags) && obj.tags.includes('wolf-routing');
|
|
9
|
+
}
|
|
6
10
|
export async function getCallInjections(deps, input) {
|
|
7
11
|
const now = deps.clock.now();
|
|
8
12
|
const topicTokens = input.topic ? tokenize(input.topic) : [];
|
|
@@ -43,14 +47,14 @@ export async function getCallInjections(deps, input) {
|
|
|
43
47
|
matched.push(l);
|
|
44
48
|
}
|
|
45
49
|
const rules = (await deps.store.list({ type: 'rule', status: 'active' }));
|
|
46
|
-
const keywordRules = rules.filter(kwMatched);
|
|
50
|
+
const keywordRules = rules.filter((r) => !isMachineState(r) && kwMatched(r));
|
|
47
51
|
for (const r of keywordRules) {
|
|
48
52
|
if (!matched.some((m) => m.id === r.id))
|
|
49
53
|
matched.push(r);
|
|
50
54
|
}
|
|
51
55
|
// 3. fallback to rules if no matches (keyword-matched rules excluded)
|
|
52
56
|
if (matched.length === 0) {
|
|
53
|
-
matched = rules.filter((r) => !keywordRules.some((k) => k.id === r.id)).slice(0, 3);
|
|
57
|
+
matched = rules.filter((r) => !isMachineState(r) && !keywordRules.some((k) => k.id === r.id)).slice(0, 3);
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
else {
|
|
@@ -61,7 +65,7 @@ export async function getCallInjections(deps, input) {
|
|
|
61
65
|
const threadId = typeof input.thread === 'string' ? input.thread : null;
|
|
62
66
|
const rules = (await deps.store.list({ type: 'rule', status: 'active' }));
|
|
63
67
|
for (const r of rules) {
|
|
64
|
-
if (r.scope === 'project' && !matched.some((m) => m.id === r.id)) {
|
|
68
|
+
if (!isMachineState(r) && r.scope === 'project' && !matched.some((m) => m.id === r.id)) {
|
|
65
69
|
matched.push(r);
|
|
66
70
|
}
|
|
67
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-call-injections.js","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAS7D,SAAS,WAAW,CAAC,GAA4B;IAC/C,OAAO,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,UAAU,gBAAgB,GAAG,CAAC,EAAE,EAAE,CAAC;AAClG,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAA+D,EAC/D,KAA6E;IAE7E,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,4BAA4B;IAC5B,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,MAAM,UAAU,GAAG,aAA0C,CAAC;IAE9D,oBAAoB;IACpB,IAAI,OAAkC,CAAC;IACvC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,wEAAwE;QACxE,0DAA0D;QAC1D,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;QACjC,IAAI,IAAI,CAAC,KAAK,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC5F,KAAK,MAAM,CAAC,IAAI,OAAO;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACnD,CAAC;YAAC,MAAM,CAAC;gBACP,oFAAoF;YACtF,CAAC;QACH,CAAC;QACD,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,EAAE,GAAc,GAAG,CAAC,gBAA6B,IAAI,EAAE,CAAC;YAC9D,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAAE,OAAO,IAAI,CAAC;YACzD,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAY,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;QACH,wEAAwE;QACxE,2EAA2E;QAC3E,MAAM,SAAS,GAAG,CAAC,GAA4B,EAAW,EAAE;YAC1D,MAAM,EAAE,GAAc,GAAG,CAAC,gBAA6B,IAAI,EAAE,CAAC;YAC9D,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,MAAM,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAA8B,CAAC;QAC3G,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3E,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAA8B,CAAC;QACvG,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"get-call-injections.js","sourceRoot":"","sources":["../../../src/app/use-cases/get-call-injections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
import { ProjectInitializer } from '../../ports/project-initializer.port.js';
|
|
2
2
|
import { PlatformAdapter, McpCommand } from '../../ports/platform-adapter.port.js';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { MemoryStore } from '../../ports/memory-store.port.js';
|
|
4
|
+
import { EventLog } from '../../ports/event-log.port.js';
|
|
5
|
+
import { Clock } from '../../ports/clock.port.js';
|
|
6
|
+
import { IdGenerator } from '../../ports/id-generator.port.js';
|
|
7
|
+
import { SearchIndex } from '../../ports/search-index.port.js';
|
|
8
|
+
import { MemoryLock } from '../../ports/memory-lock.port.js';
|
|
9
|
+
import type { MemoryTypeDeclaration } from '../../domain/memory-types.js';
|
|
10
|
+
import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
|
|
11
|
+
import { RenderAction, ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
5
12
|
/** Минимальный контракт реестра для init (структурно совместим с ProjectsRegistry). */
|
|
6
13
|
export interface ProjectRegistry {
|
|
7
14
|
register(path: string, schemaVersion: number): Promise<void>;
|
|
@@ -12,7 +19,9 @@ export interface BaseSetOutcome {
|
|
|
12
19
|
reason?: string;
|
|
13
20
|
}
|
|
14
21
|
export interface BaseSetDeps {
|
|
15
|
-
render: (baseDir: string
|
|
22
|
+
render: (baseDir: string, opts?: {
|
|
23
|
+
models?: ModelContext;
|
|
24
|
+
}) => Promise<BaseSetOutcome[]>;
|
|
16
25
|
seed: (baseDir: string) => Promise<BaseSetOutcome[]>;
|
|
17
26
|
}
|
|
18
27
|
export interface InitProjectDeps {
|
|
@@ -22,10 +31,28 @@ export interface InitProjectDeps {
|
|
|
22
31
|
mcpCommand: McpCommand;
|
|
23
32
|
/** true, когда бинарник запущен через npx (try-out: MCP-конфиги не пишем никогда). */
|
|
24
33
|
npx: boolean;
|
|
25
|
-
scanDeps: Parameters<typeof scanProject>[0];
|
|
26
34
|
/** Проставить маркер версии схемы (writeSchemaVersionIfAbsent). */
|
|
27
35
|
markSchemaCurrent: (baseDir: string) => Promise<void>;
|
|
28
36
|
baseSet?: BaseSetDeps;
|
|
37
|
+
/** Память: routing-объект моделей (§4.5) + init-отчёт (§4.1). */
|
|
38
|
+
store: MemoryStore;
|
|
39
|
+
log: EventLog;
|
|
40
|
+
clock: Clock;
|
|
41
|
+
idGen: IdGenerator;
|
|
42
|
+
index?: SearchIndex;
|
|
43
|
+
lock?: MemoryLock;
|
|
44
|
+
declarations?: readonly MemoryTypeDeclaration[];
|
|
45
|
+
/** Версия wolf для секции found отчёта (§4.1); нет — строка версий опускается. */
|
|
46
|
+
wolfVersion?: string;
|
|
47
|
+
}
|
|
48
|
+
/** Входы init v2 (§4 п.4): платформы и модель известны ДО рендера набора. */
|
|
49
|
+
export interface InitProjectInput {
|
|
50
|
+
/** Явный выбор платформ (флаг или TTY-ответ) — авторитетен (§4.4); undefined — дефолт рендера. */
|
|
51
|
+
platformChoice?: string[];
|
|
52
|
+
platformSource?: 'flag' | 'tty' | 'default';
|
|
53
|
+
/** Модель агентов (§4.5): primary всегда известен (Q7/Q11); worker = primary при init. */
|
|
54
|
+
models: ModelContext;
|
|
55
|
+
modelSource?: 'flag' | 'tty';
|
|
29
56
|
}
|
|
30
57
|
export interface PlatformInitOutcome {
|
|
31
58
|
platform: string;
|
|
@@ -34,19 +61,28 @@ export interface PlatformInitOutcome {
|
|
|
34
61
|
}
|
|
35
62
|
export interface InitProjectResult {
|
|
36
63
|
npx: boolean;
|
|
37
|
-
documentCount: number;
|
|
38
64
|
platformOutcomes: PlatformInitOutcome[];
|
|
39
65
|
baseSetOutcomes: BaseSetOutcome[];
|
|
66
|
+
routing: {
|
|
67
|
+
action: 'created' | 'unchanged' | 'superseded' | 'skipped';
|
|
68
|
+
id?: string;
|
|
69
|
+
};
|
|
70
|
+
initReport: {
|
|
71
|
+
action: 'created' | 'skipped';
|
|
72
|
+
id?: string;
|
|
73
|
+
};
|
|
40
74
|
}
|
|
75
|
+
/** Теги init-отчёта — единственный машинный маркер (D4). */
|
|
76
|
+
export declare const INIT_REPORT_TAGS: readonly ["wolf-init", "onboarding-v2"];
|
|
41
77
|
export declare function looksLikeProjectRoot(dir: string): boolean;
|
|
78
|
+
/** Guard идемпотентности отчёта (§4.1): активный report с тегами wolf-init+onboarding-v2. */
|
|
79
|
+
export declare function findInitReport(store: MemoryStore): Promise<MemoryObject | null>;
|
|
42
80
|
/**
|
|
43
|
-
* `wolf init` (спека §
|
|
44
|
-
*
|
|
45
|
-
*
|
|
81
|
+
* `wolf init` v2 (спека §4, onboarding-pipeline-v2): без скана (D1/F8 — полный скан живёт
|
|
82
|
+
* в bootstrap), платформы/модель до рендера, routing-объект до рендера, opencode-конфиг
|
|
83
|
+
* безусловно по факту рендера набора (D2/F4), init-отчёт с guard по тегам (D4).
|
|
46
84
|
*/
|
|
47
|
-
export declare function initProject(deps: InitProjectDeps, baseDir: string,
|
|
48
|
-
platformIds?: string[];
|
|
49
|
-
}): Promise<InitProjectResult>;
|
|
85
|
+
export declare function initProject(deps: InitProjectDeps, baseDir: string, input: InitProjectInput): Promise<InitProjectResult>;
|
|
50
86
|
/**
|
|
51
87
|
* §6: повреждённый .wolf → неинтерактивное восстановление:
|
|
52
88
|
* битый yaml → бэкап в .wolf/backup/<ts>/ + дефолтный рендер.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"init-project.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,42 +1,74 @@
|
|
|
1
1
|
import { existsSync } from 'fs';
|
|
2
2
|
import * as fs from 'fs/promises';
|
|
3
|
-
import { join } from 'path';
|
|
3
|
+
import { join, basename } from 'path';
|
|
4
4
|
import yaml from 'js-yaml';
|
|
5
|
-
import { scanProject } from './scan-project.js';
|
|
6
5
|
import { CURRENT_SCHEMA_VERSION } from '../../adapters/fs/schema-version.js';
|
|
7
6
|
import { renderConfigYaml } from '../../adapters/fs/config-file.js';
|
|
8
7
|
import { configPath } from '../../adapters/fs/project-paths.js';
|
|
9
8
|
import { writeFileAtomic } from '../../adapters/fs/markdown-memory-store.js';
|
|
10
9
|
import { UserFacingError } from '../../domain/errors.js';
|
|
10
|
+
import { addMemoryObject } from './add-memory-object.js';
|
|
11
|
+
import { upsertModelRouting } from './model-routing.js';
|
|
12
|
+
/** Теги init-отчёта — единственный машинный маркер (D4). */
|
|
13
|
+
export const INIT_REPORT_TAGS = ['wolf-init', 'onboarding-v2'];
|
|
11
14
|
const PROJECT_ROOT_MARKERS = ['package.json', '.git', 'pyproject.toml', 'go.mod', 'Cargo.toml', 'README.md'];
|
|
12
15
|
export function looksLikeProjectRoot(dir) {
|
|
13
16
|
return PROJECT_ROOT_MARKERS.some((marker) => existsSync(join(dir, marker)));
|
|
14
17
|
}
|
|
18
|
+
/** Guard идемпотентности отчёта (§4.1): активный report с тегами wolf-init+onboarding-v2. */
|
|
19
|
+
export async function findInitReport(store) {
|
|
20
|
+
const reports = await store.list({ type: 'report' });
|
|
21
|
+
const active = reports.filter((o) => o.status === 'active' && INIT_REPORT_TAGS.every((t) => o.tags.includes(t)));
|
|
22
|
+
return active.length > 0 ? active[0] : null;
|
|
23
|
+
}
|
|
15
24
|
/**
|
|
16
|
-
* `wolf init` (спека §
|
|
17
|
-
*
|
|
18
|
-
*
|
|
25
|
+
* `wolf init` v2 (спека §4, onboarding-pipeline-v2): без скана (D1/F8 — полный скан живёт
|
|
26
|
+
* в bootstrap), платформы/модель до рендера, routing-объект до рендера, opencode-конфиг
|
|
27
|
+
* безусловно по факту рендера набора (D2/F4), init-отчёт с guard по тегам (D4).
|
|
19
28
|
*/
|
|
20
|
-
export async function initProject(deps, baseDir,
|
|
29
|
+
export async function initProject(deps, baseDir, input) {
|
|
21
30
|
if (!looksLikeProjectRoot(baseDir)) {
|
|
22
31
|
throw new UserFacingError('Not a project root (no package.json/.git/pyproject.toml/go.mod/Cargo.toml/README.md found). cd into your project first.');
|
|
23
32
|
}
|
|
24
33
|
await deps.initializer.initialize(baseDir);
|
|
25
34
|
await deps.markSchemaCurrent(baseDir);
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
const memDeps = {
|
|
36
|
+
store: deps.store,
|
|
37
|
+
log: deps.log,
|
|
38
|
+
clock: deps.clock,
|
|
39
|
+
idGen: deps.idGen,
|
|
40
|
+
index: deps.index,
|
|
41
|
+
lock: deps.lock,
|
|
42
|
+
declarations: deps.declarations,
|
|
43
|
+
};
|
|
44
|
+
// §4 п.4/§4.5: routing-объект до рендера — рендер подставляет модели. npx молчит (§4 п.6).
|
|
45
|
+
const routing = deps.npx
|
|
46
|
+
? { action: 'skipped' }
|
|
47
|
+
: await upsertModelRouting(memDeps, input.models, 'wolf-init');
|
|
48
|
+
// §4 п.5: рендер базового набора с подстановкой моделей (AGENTS.md — частью рендера, §4.2)
|
|
49
|
+
const baseSetOutcomes = [];
|
|
50
|
+
if (deps.baseSet) {
|
|
51
|
+
if (deps.npx) {
|
|
52
|
+
baseSetOutcomes.push({ file: '(base set)', action: 'skipped', reason: 'npx try-out не пишет набор (спека §7)' });
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
baseSetOutcomes.push(...(await deps.baseSet.render(baseDir, { models: input.models })));
|
|
56
|
+
baseSetOutcomes.push(...(await deps.baseSet.seed(baseDir)));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// §4 п.6: платформы (D2+D10/F4)
|
|
29
60
|
const platformOutcomes = [];
|
|
30
61
|
if (deps.npx) {
|
|
31
62
|
// try-out: память создаём, конфиги — никогда (спека §3, npx-путь)
|
|
32
63
|
platformOutcomes.push({ platform: 'npx', action: 'skipped', reason: 'npx try-out never writes MCP configs' });
|
|
33
64
|
}
|
|
34
|
-
else if (
|
|
35
|
-
// явный
|
|
36
|
-
const wanted = new Set(
|
|
65
|
+
else if (input.platformChoice !== undefined) {
|
|
66
|
+
// явный выбор (флаг/TTY) ЗАМЕНЯЕТ набор: wolf-записи платформ вне списка удаляются (§4.4 п.1)
|
|
67
|
+
const wanted = new Set(input.platformChoice);
|
|
37
68
|
for (const adapter of deps.adapters) {
|
|
38
69
|
if (wanted.has(adapter.id)) {
|
|
39
|
-
|
|
70
|
+
const r = await adapter.writeConfig(baseDir, deps.mcpCommand);
|
|
71
|
+
platformOutcomes.push({ platform: adapter.id, action: r.action, reason: r.reason });
|
|
40
72
|
}
|
|
41
73
|
else if (adapter.detect(baseDir)) {
|
|
42
74
|
const removed = await adapter.removeWolf(baseDir);
|
|
@@ -49,33 +81,96 @@ export async function initProject(deps, baseDir, opts = {}) {
|
|
|
49
81
|
}
|
|
50
82
|
}
|
|
51
83
|
else {
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
action:
|
|
58
|
-
reason: 'no platform detected; use --platform opencode|claude',
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
for (const adapter of detected) {
|
|
63
|
-
platformOutcomes.push({ platform: adapter.id, action: await adapter.writeConfig(baseDir, deps.mcpCommand) });
|
|
84
|
+
// неинтерактивный дефолт (§4.4 п.3): opencode — безусловно, по факту рендера набора
|
|
85
|
+
// (D2: детекция не гейтит; F4); прочие платформы — по маркерам, не зависящим от рендера
|
|
86
|
+
for (const adapter of deps.adapters) {
|
|
87
|
+
if (adapter.id === 'opencode' || adapter.detect(baseDir)) {
|
|
88
|
+
const r = await adapter.writeConfig(baseDir, deps.mcpCommand);
|
|
89
|
+
platformOutcomes.push({ platform: adapter.id, action: r.action, reason: r.reason });
|
|
64
90
|
}
|
|
65
91
|
}
|
|
66
92
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
93
|
+
// §4 п.8: реестр проектов
|
|
94
|
+
await deps.registry.register(baseDir, CURRENT_SCHEMA_VERSION);
|
|
95
|
+
// §4 п.9: init-отчёт (D4) — guard по тегам, повторный init не дублирует; npx молчит (§4 п.6)
|
|
96
|
+
let initReport;
|
|
97
|
+
if (deps.npx) {
|
|
98
|
+
initReport = { action: 'skipped' };
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
const existing = await findInitReport(deps.store);
|
|
102
|
+
if (existing) {
|
|
103
|
+
initReport = { action: 'skipped', id: existing.id };
|
|
71
104
|
}
|
|
72
105
|
else {
|
|
73
|
-
|
|
74
|
-
|
|
106
|
+
const { object } = await addMemoryObject(memDeps, {
|
|
107
|
+
type: 'report',
|
|
108
|
+
title: `Init report: ${basename(baseDir)}`,
|
|
109
|
+
body: renderInitReportBody(deps, input, { baseSetOutcomes, platformOutcomes, routingAction: routing.action }),
|
|
110
|
+
createdBy: 'wolf-init',
|
|
111
|
+
tags: [...INIT_REPORT_TAGS],
|
|
112
|
+
importance: 0.7,
|
|
113
|
+
});
|
|
114
|
+
initReport = { action: 'created', id: object.id };
|
|
75
115
|
}
|
|
76
116
|
}
|
|
77
|
-
|
|
78
|
-
|
|
117
|
+
return { npx: deps.npx, platformOutcomes, baseSetOutcomes, routing, initReport };
|
|
118
|
+
}
|
|
119
|
+
/** Тело init-отчёта (§4.1): made / found / needs-fix. */
|
|
120
|
+
function renderInitReportBody(deps, input, outcomes) {
|
|
121
|
+
const { baseSetOutcomes, platformOutcomes, routingAction } = outcomes;
|
|
122
|
+
const platformSource = input.platformSource ?? (input.platformChoice ? 'flag' : 'default');
|
|
123
|
+
const selectedPlatforms = input.platformChoice ??
|
|
124
|
+
platformOutcomes.filter((o) => o.action !== 'removed' && o.action !== 'skipped').map((o) => o.platform);
|
|
125
|
+
const modelSource = input.modelSource ?? 'flag';
|
|
126
|
+
const agentsMd = baseSetOutcomes.find((o) => o.file === 'AGENTS.md');
|
|
127
|
+
const made = [];
|
|
128
|
+
for (const o of baseSetOutcomes) {
|
|
129
|
+
if (o.file !== 'AGENTS.md')
|
|
130
|
+
made.push(`- набор: ${o.file} — ${o.action}${o.reason ? ` (${o.reason})` : ''}`);
|
|
131
|
+
}
|
|
132
|
+
for (const o of platformOutcomes) {
|
|
133
|
+
if (o.action !== 'removed' && o.action !== 'skipped')
|
|
134
|
+
made.push(`- конфиг платформы ${o.platform}: ${o.action}`);
|
|
135
|
+
}
|
|
136
|
+
if (agentsMd)
|
|
137
|
+
made.push(`- AGENTS.md: ${agentsMd.action}`);
|
|
138
|
+
made.push(`- платформы: ${selectedPlatforms.join(', ') || '—'} (источник: ${platformSource})`);
|
|
139
|
+
made.push(`- модель: primary ${input.models.primary} (источник: ${modelSource}) — подставлена всем агентам (worker = primary)`);
|
|
140
|
+
made.push(`- routing-объект моделей: ${routingAction}`);
|
|
141
|
+
const found = [];
|
|
142
|
+
const skippedFiles = baseSetOutcomes.filter((o) => o.action === 'skipped' && o.file !== '(base set)');
|
|
143
|
+
if (skippedFiles.length > 0)
|
|
144
|
+
found.push(`- существовавшие файлы (skipped): ${skippedFiles.map((o) => o.file).join(', ')}`);
|
|
145
|
+
if (agentsMd && agentsMd.action !== 'created')
|
|
146
|
+
found.push(`- AGENTS.md уже существовал (${agentsMd.action})`);
|
|
147
|
+
const versions = [];
|
|
148
|
+
if (deps.wolfVersion)
|
|
149
|
+
versions.push(`wolf ${deps.wolfVersion}`);
|
|
150
|
+
versions.push(`schema v${CURRENT_SCHEMA_VERSION}`);
|
|
151
|
+
found.push(`- версии: ${versions.join(', ')}`);
|
|
152
|
+
const needsFix = [];
|
|
153
|
+
for (const o of platformOutcomes) {
|
|
154
|
+
if (o.reason && o.action !== 'removed')
|
|
155
|
+
needsFix.push(`- ${o.platform}: ${o.reason}`);
|
|
156
|
+
}
|
|
157
|
+
// §4.4 граничный случай: явный выбор без opencode — набор отрендерен, но MCP не подключён (осознанное состояние)
|
|
158
|
+
if (input.platformChoice !== undefined && !input.platformChoice.includes('opencode')) {
|
|
159
|
+
needsFix.push('- opencode вне списка --platform: агенты Wolf отрендерены в .opencode/, но mcp.wolf/default_agent не записаны; подключите: wolf init --platform opencode,…');
|
|
160
|
+
}
|
|
161
|
+
const mcpWritten = platformOutcomes.some((o) => o.action === 'written' || o.action === 'replaced');
|
|
162
|
+
if (mcpWritten)
|
|
163
|
+
needsFix.push('- подключите MCP: перезапустите платформу (opencode подхватит mcp.wolf и default_agent)');
|
|
164
|
+
return [
|
|
165
|
+
'## Сделано (made)',
|
|
166
|
+
...made,
|
|
167
|
+
'',
|
|
168
|
+
'## Обнаружено (found)',
|
|
169
|
+
...found,
|
|
170
|
+
'',
|
|
171
|
+
'## Требует поправки (needs-fix)',
|
|
172
|
+
...needsFix,
|
|
173
|
+
].join('\n');
|
|
79
174
|
}
|
|
80
175
|
/**
|
|
81
176
|
* §6: повреждённый .wolf → неинтерактивное восстановление:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"init-project.js","sourceRoot":"","sources":["../../../src/app/use-cases/init-project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { MemoryStore } from '../../ports/memory-store.port.js';
|
|
2
|
+
import { EventLog } from '../../ports/event-log.port.js';
|
|
3
|
+
import { Clock } from '../../ports/clock.port.js';
|
|
4
|
+
import { IdGenerator } from '../../ports/id-generator.port.js';
|
|
5
|
+
import { SearchIndex } from '../../ports/search-index.port.js';
|
|
6
|
+
import { MemoryLock } from '../../ports/memory-lock.port.js';
|
|
7
|
+
import { MemoryObject } from '../../domain/schemas/memory-object-schema.js';
|
|
8
|
+
import type { MemoryTypeDeclaration } from '../../domain/memory-types.js';
|
|
9
|
+
import { ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
10
|
+
export declare const ROUTING_TAGS: readonly ["wolf-routing", "models"];
|
|
11
|
+
export interface ModelRoutingDeps {
|
|
12
|
+
store: MemoryStore;
|
|
13
|
+
log: EventLog;
|
|
14
|
+
clock: Clock;
|
|
15
|
+
idGen: IdGenerator;
|
|
16
|
+
index?: SearchIndex;
|
|
17
|
+
lock?: MemoryLock;
|
|
18
|
+
declarations?: readonly MemoryTypeDeclaration[];
|
|
19
|
+
}
|
|
20
|
+
export interface UpsertModelRoutingResult {
|
|
21
|
+
action: 'created' | 'unchanged' | 'superseded';
|
|
22
|
+
id: string;
|
|
23
|
+
supersededId?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Guard (как init-отчёт §4.1): активный объект по тегам; один — первый. */
|
|
26
|
+
export declare function findModelRouting(store: MemoryStore): Promise<MemoryObject | null>;
|
|
27
|
+
/** Машинно-читаемые строки `primary: <id>` / `worker: <id>` в body. */
|
|
28
|
+
export declare function parseModelRouting(obj: MemoryObject): ModelContext | null;
|
|
29
|
+
export declare function upsertModelRouting(deps: ModelRoutingDeps, models: ModelContext, createdBy: string): Promise<UpsertModelRoutingResult>;
|
|
30
|
+
//# sourceMappingURL=model-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/model-routing.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAC;AAC5E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAIrE,eAAO,MAAM,YAAY,qCAAsC,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,GAAG,EAAE,QAAQ,CAAC;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,YAAY,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACjD;AAED,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,4EAA4E;AAC5E,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAIvF;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,YAAY,GAAG,YAAY,GAAG,IAAI,CAIxE;AAED,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,gBAAgB,EACtB,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC,CAsBnC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { addMemoryObject } from './add-memory-object.js';
|
|
2
|
+
import { supersedeMemoryObject } from './supersede-memory-object.js';
|
|
3
|
+
export const ROUTING_TAGS = ['wolf-routing', 'models'];
|
|
4
|
+
/** Guard (как init-отчёт §4.1): активный объект по тегам; один — первый. */
|
|
5
|
+
export async function findModelRouting(store) {
|
|
6
|
+
const rules = await store.list({ type: 'rule' });
|
|
7
|
+
const active = rules.filter((o) => o.status === 'active' && ROUTING_TAGS.every((t) => o.tags.includes(t)));
|
|
8
|
+
return active.length > 0 ? active[0] : null;
|
|
9
|
+
}
|
|
10
|
+
/** Машинно-читаемые строки `primary: <id>` / `worker: <id>` в body. */
|
|
11
|
+
export function parseModelRouting(obj) {
|
|
12
|
+
const primary = obj.body.match(/^primary:[ \t]*(\S+)/m)?.[1];
|
|
13
|
+
const worker = obj.body.match(/^worker:[ \t]*(\S+)/m)?.[1];
|
|
14
|
+
return primary && worker ? { primary, worker } : null;
|
|
15
|
+
}
|
|
16
|
+
export async function upsertModelRouting(deps, models, createdBy) {
|
|
17
|
+
const existing = await findModelRouting(deps.store);
|
|
18
|
+
if (existing) {
|
|
19
|
+
const parsed = parseModelRouting(existing);
|
|
20
|
+
if (parsed && parsed.primary === models.primary && parsed.worker === models.worker) {
|
|
21
|
+
return { action: 'unchanged', id: existing.id };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const { object } = await addMemoryObject(deps, {
|
|
25
|
+
type: 'rule',
|
|
26
|
+
title: 'Routing: модели агентов',
|
|
27
|
+
body: `Модели агентов базового набора (onboarding v2, §4.5).\nprimary: ${models.primary}\nworker: ${models.worker}\n`,
|
|
28
|
+
createdBy,
|
|
29
|
+
tags: [...ROUTING_TAGS],
|
|
30
|
+
memoryClass: 'working',
|
|
31
|
+
extra: { scope: 'project' },
|
|
32
|
+
});
|
|
33
|
+
if (existing) {
|
|
34
|
+
await supersedeMemoryObject(deps, existing.id, object.id);
|
|
35
|
+
return { action: 'superseded', id: object.id, supersededId: existing.id };
|
|
36
|
+
}
|
|
37
|
+
return { action: 'created', id: object.id };
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=model-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-routing.js","sourceRoot":"","sources":["../../../src/app/use-cases/model-routing.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAErE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,cAAc,EAAE,QAAQ,CAAU,CAAC;AAkBhE,4EAA4E;AAC5E,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAkB;IACvD,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9C,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,iBAAiB,CAAC,GAAiB;IACjD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC3D,OAAO,OAAO,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,IAAsB,EACtB,MAAoB,EACpB,SAAiB;IAEjB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACnF,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;QAClD,CAAC;IACH,CAAC;IACD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;QAC7C,IAAI,EAAE,MAAM;QACZ,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,mEAAmE,MAAM,CAAC,OAAO,aAAa,MAAM,CAAC,MAAM,IAAI;QACrH,SAAS;QACT,IAAI,EAAE,CAAC,GAAG,YAAY,CAAC;QACvB,WAAW,EAAE,SAAS;QACtB,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;KAC5B,CAAC,CAAC;IACH,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { BaseSetRenderer } from '../../ports/base-set-renderer.port.js';
|
|
1
|
+
import { BaseSetRenderer, ModelContext } from '../../ports/base-set-renderer.port.js';
|
|
2
2
|
/**
|
|
3
3
|
* Sync (спека §7): только штампованные файлы; orphaned — в отчёт;
|
|
4
4
|
* память (.wolf/, seeded playbook'и) НЕ трогается никогда (мутации — зона Стюарда, D4).
|
|
5
5
|
* Bake-in при sync не используется: opencode = plugin-inject; bake-in — механизм
|
|
6
6
|
* минимальных платформ (вызывается адаптером с BakeResolver, Task 4).
|
|
7
|
+
* models — контекст routing-объекта (§4.5); без него рендер сам применяет omit.
|
|
7
8
|
*/
|
|
8
|
-
export declare function syncBaseSet(renderer: BaseSetRenderer, baseDir: string): Promise<{
|
|
9
|
+
export declare function syncBaseSet(renderer: BaseSetRenderer, baseDir: string, models?: ModelContext | 'omit'): Promise<{
|
|
9
10
|
outcomes: import("../../ports/base-set-renderer.port.js").RenderOutcome[];
|
|
10
11
|
orphaned: string[];
|
|
11
12
|
}>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-base-set.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/sync-base-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"sync-base-set.d.ts","sourceRoot":"","sources":["../../../src/app/use-cases/sync-base-set.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAEtF;;;;;;GAMG;AACH,wBAAsB,WAAW,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM;;;GAE3G"}
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* память (.wolf/, seeded playbook'и) НЕ трогается никогда (мутации — зона Стюарда, D4).
|
|
4
4
|
* Bake-in при sync не используется: opencode = plugin-inject; bake-in — механизм
|
|
5
5
|
* минимальных платформ (вызывается адаптером с BakeResolver, Task 4).
|
|
6
|
+
* models — контекст routing-объекта (§4.5); без него рендер сам применяет omit.
|
|
6
7
|
*/
|
|
7
|
-
export async function syncBaseSet(renderer, baseDir) {
|
|
8
|
-
return renderer.syncBaseSet(baseDir);
|
|
8
|
+
export async function syncBaseSet(renderer, baseDir, models) {
|
|
9
|
+
return renderer.syncBaseSet(baseDir, models);
|
|
9
10
|
}
|
|
10
11
|
//# sourceMappingURL=sync-base-set.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sync-base-set.js","sourceRoot":"","sources":["../../../src/app/use-cases/sync-base-set.ts"],"names":[],"mappings":"AAGA
|
|
1
|
+
{"version":3,"file":"sync-base-set.js","sourceRoot":"","sources":["../../../src/app/use-cases/sync-base-set.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAyB,EAAE,OAAe,EAAE,MAA8B;IAC1G,OAAO,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC/C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/domain/governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AACxF,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IACrD,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAMA;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IACtC,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,MAAM,EAAE,CAMX;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../../src/domain/governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,CAAC;AAClD,MAAM,MAAM,SAAS,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,iBAAiB,CAAC;AACxF,MAAM,MAAM,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAE9D,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAE7D;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG;IACrD,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAMA;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE;IACtC,YAAY,EAAE,WAAW,CAAC;IAC1B,UAAU,EAAE,SAAS,CAAC;IACtB,QAAQ,EAAE,QAAQ,CAAC;CACpB,GAAG,MAAM,EAAE,CAMX;AAED,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,YAAY,EAAE,YAAY,EAAE,CAkCpE,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,YAAY,GAAG,OAAO,CAE3E"}
|
|
@@ -17,8 +17,9 @@ export function validateGovernance(obj) {
|
|
|
17
17
|
}
|
|
18
18
|
export const ALLOWED_TRANSITIONS = {
|
|
19
19
|
// resolved/obsolete/answered из active нужны блокерам и вопросам (open-question);
|
|
20
|
-
// deprecated из active — типу tool (Фаза C);
|
|
21
|
-
//
|
|
20
|
+
// deprecated из active — типу tool (Фаза C); paused из active — work-thread
|
|
21
|
+
// (onboarding v2 §5.1: владелец сознательно откладывает);
|
|
22
|
+
// эффективные переходы = ALLOWED_TRANSITIONS ∩ lifecycle типа.
|
|
22
23
|
active: [
|
|
23
24
|
'stale',
|
|
24
25
|
'superseded',
|
|
@@ -29,6 +30,7 @@ export const ALLOWED_TRANSITIONS = {
|
|
|
29
30
|
'obsolete',
|
|
30
31
|
'answered',
|
|
31
32
|
'deprecated',
|
|
33
|
+
'paused',
|
|
32
34
|
],
|
|
33
35
|
open: ['resolved', 'rejected', 'archived', 'answered'],
|
|
34
36
|
resolved: ['archived'],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/domain/governance.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAKlD,OAAO;QACL,YAAY,EAAE,SAAS;QACvB,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAIlC;IACC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,UAAU,KAAK,iBAAiB,IAAI,GAAG,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAyC;IACvE,kFAAkF;IAClF,
|
|
1
|
+
{"version":3,"file":"governance.js","sourceRoot":"","sources":["../../src/domain/governance.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,gBAAgB,CAAC,SAAiB;IAChD,OAAO,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,SAAiB;IAKlD,OAAO;QACL,YAAY,EAAE,SAAS;QACvB,UAAU,EAAE,gBAAgB,CAAC,SAAS,CAAC;QACvC,QAAQ,EAAE,WAAW;KACtB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,GAIlC;IACC,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,GAAG,CAAC,UAAU,KAAK,iBAAiB,IAAI,GAAG,CAAC,YAAY,KAAK,WAAW,EAAE,CAAC;QAC7E,QAAQ,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IACpE,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAyC;IACvE,kFAAkF;IAClF,4EAA4E;IAC5E,0DAA0D;IAC1D,+DAA+D;IAC/D,MAAM,EAAE;QACN,OAAO;QACP,YAAY;QACZ,UAAU;QACV,aAAa;QACb,WAAW;QACX,UAAU;QACV,UAAU;QACV,UAAU;QACV,YAAY;QACZ,QAAQ;KACT;IACD,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IACtD,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC7B,WAAW,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;IACnC,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,EAAE;IACZ,MAAM,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;IAC9B,SAAS,EAAE,CAAC,UAAU,CAAC;IACvB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,UAAU,CAAC;IACtB,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC;IAC9C,QAAQ,EAAE,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;IAC5C,2DAA2D;IAC3D,SAAS,EAAE,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAC;IAC/C,yDAAyD;IACzD,UAAU,EAAE,CAAC,QAAQ,EAAE,UAAU,CAAC;CACnC,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,IAAkB,EAAE,EAAgB;IAChE,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC"}
|