@shardworks/nexus-core 0.1.16 → 0.1.18
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/clockworks.d.ts +54 -0
- package/dist/clockworks.d.ts.map +1 -0
- package/dist/clockworks.js +264 -0
- package/dist/clockworks.js.map +1 -0
- package/dist/commission.d.ts +35 -0
- package/dist/commission.d.ts.map +1 -0
- package/dist/commission.js +80 -0
- package/dist/commission.js.map +1 -0
- package/dist/engine.d.ts +60 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +45 -0
- package/dist/engine.js.map +1 -0
- package/dist/events.d.ts +49 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +134 -0
- package/dist/events.js.map +1 -0
- package/dist/guild-config.d.ts +37 -3
- package/dist/guild-config.d.ts.map +1 -1
- package/dist/guild-config.js +1 -1
- package/dist/guild-config.js.map +1 -1
- package/dist/index.d.ts +6 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/init-guild.d.ts.map +1 -1
- package/dist/init-guild.js +71 -2
- package/dist/init-guild.js.map +1 -1
- package/dist/ledger.d.ts +1 -1
- package/dist/ledger.d.ts.map +1 -1
- package/dist/ledger.js +7 -6
- package/dist/ledger.js.map +1 -1
- package/dist/rehydrate.d.ts +7 -0
- package/dist/rehydrate.d.ts.map +1 -1
- package/dist/rehydrate.js +33 -8
- package/dist/rehydrate.js.map +1 -1
- package/dist/workshop.d.ts +85 -0
- package/dist/workshop.d.ts.map +1 -0
- package/dist/workshop.js +189 -0
- package/dist/workshop.js.map +1 -0
- package/package.json +1 -1
- package/dist/dispatch.d.ts +0 -26
- package/dist/dispatch.d.ts.map +0 -1
- package/dist/dispatch.js +0 -55
- package/dist/dispatch.js.map +0 -1
package/dist/events.js
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Event signalling — persists events to the Ledger for Clockworks processing.
|
|
3
|
+
*
|
|
4
|
+
* signalEvent() is the write path. It records an immutable fact in the events
|
|
5
|
+
* table. It does NOT process the event — the Clockworks runner handles that
|
|
6
|
+
* separately via `nsg clock`.
|
|
7
|
+
*/
|
|
8
|
+
import Database from 'better-sqlite3';
|
|
9
|
+
import { ledgerPath } from "./nexus-home.js";
|
|
10
|
+
import { readGuildConfig } from "./guild-config.js";
|
|
11
|
+
/** Reserved framework event namespaces. Animas cannot signal these. */
|
|
12
|
+
const FRAMEWORK_NAMESPACES = [
|
|
13
|
+
'anima.',
|
|
14
|
+
'commission.',
|
|
15
|
+
'tool.',
|
|
16
|
+
'migration.',
|
|
17
|
+
'guild.',
|
|
18
|
+
'standing-order.',
|
|
19
|
+
];
|
|
20
|
+
/**
|
|
21
|
+
* Check if an event name is in a reserved framework namespace.
|
|
22
|
+
*/
|
|
23
|
+
export function isFrameworkEvent(name) {
|
|
24
|
+
return FRAMEWORK_NAMESPACES.some(ns => name.startsWith(ns));
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Validate that a custom event name is declared in guild.json clockworks.events.
|
|
28
|
+
* Throws if the name is in a reserved namespace or not declared.
|
|
29
|
+
*/
|
|
30
|
+
export function validateCustomEvent(home, name) {
|
|
31
|
+
if (isFrameworkEvent(name)) {
|
|
32
|
+
throw new Error(`Event "${name}" is in a reserved framework namespace. ` +
|
|
33
|
+
`Animas and operators can only signal custom events declared in guild.json.`);
|
|
34
|
+
}
|
|
35
|
+
const config = readGuildConfig(home);
|
|
36
|
+
const declaredEvents = config.clockworks?.events ?? {};
|
|
37
|
+
if (!Object.hasOwn(declaredEvents, name)) {
|
|
38
|
+
const available = Object.keys(declaredEvents);
|
|
39
|
+
throw new Error(`Event "${name}" is not declared in guild.json clockworks.events. ` +
|
|
40
|
+
`Declared events: ${available.length > 0 ? available.join(', ') : '(none)'}`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Signal an event — persist it to the Ledger's events table.
|
|
45
|
+
*
|
|
46
|
+
* Does not process the event. The Clockworks runner processes separately.
|
|
47
|
+
*
|
|
48
|
+
* @param home - Absolute path to the guild root.
|
|
49
|
+
* @param name - Event name (e.g. "commission.sealed", "code.reviewed").
|
|
50
|
+
* @param payload - Event-specific data (JSON-serializable).
|
|
51
|
+
* @param emitter - Who signaled it: anima name, engine name, or "framework".
|
|
52
|
+
* @returns The event id.
|
|
53
|
+
*/
|
|
54
|
+
export function signalEvent(home, name, payload, emitter) {
|
|
55
|
+
const db = new Database(ledgerPath(home));
|
|
56
|
+
db.pragma('foreign_keys = ON');
|
|
57
|
+
try {
|
|
58
|
+
const result = db.prepare(`INSERT INTO events (name, payload, emitter) VALUES (?, ?, ?)`).run(name, payload != null ? JSON.stringify(payload) : null, emitter);
|
|
59
|
+
return Number(result.lastInsertRowid);
|
|
60
|
+
}
|
|
61
|
+
finally {
|
|
62
|
+
db.close();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Read pending (unprocessed) events from the Ledger, ordered by fired_at.
|
|
67
|
+
*/
|
|
68
|
+
export function readPendingEvents(home) {
|
|
69
|
+
const db = new Database(ledgerPath(home));
|
|
70
|
+
db.pragma('foreign_keys = ON');
|
|
71
|
+
try {
|
|
72
|
+
const rows = db.prepare(`SELECT id, name, payload, emitter, fired_at FROM events WHERE processed = 0 ORDER BY fired_at, id`).all();
|
|
73
|
+
return rows.map(row => ({
|
|
74
|
+
id: row.id,
|
|
75
|
+
name: row.name,
|
|
76
|
+
payload: row.payload ? JSON.parse(row.payload) : null,
|
|
77
|
+
emitter: row.emitter,
|
|
78
|
+
firedAt: row.fired_at,
|
|
79
|
+
}));
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
db.close();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Read a single event by id.
|
|
87
|
+
*/
|
|
88
|
+
export function readEvent(home, id) {
|
|
89
|
+
const db = new Database(ledgerPath(home));
|
|
90
|
+
db.pragma('foreign_keys = ON');
|
|
91
|
+
try {
|
|
92
|
+
const row = db.prepare(`SELECT id, name, payload, emitter, fired_at FROM events WHERE id = ?`).get(id);
|
|
93
|
+
if (!row)
|
|
94
|
+
return null;
|
|
95
|
+
return {
|
|
96
|
+
id: row.id,
|
|
97
|
+
name: row.name,
|
|
98
|
+
payload: row.payload ? JSON.parse(row.payload) : null,
|
|
99
|
+
emitter: row.emitter,
|
|
100
|
+
firedAt: row.fired_at,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
finally {
|
|
104
|
+
db.close();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Mark an event as processed.
|
|
109
|
+
*/
|
|
110
|
+
export function markEventProcessed(home, eventId) {
|
|
111
|
+
const db = new Database(ledgerPath(home));
|
|
112
|
+
db.pragma('foreign_keys = ON');
|
|
113
|
+
try {
|
|
114
|
+
db.prepare(`UPDATE events SET processed = 1 WHERE id = ?`).run(eventId);
|
|
115
|
+
}
|
|
116
|
+
finally {
|
|
117
|
+
db.close();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Record an event dispatch in the event_dispatches table.
|
|
122
|
+
*/
|
|
123
|
+
export function recordDispatch(home, opts) {
|
|
124
|
+
const db = new Database(ledgerPath(home));
|
|
125
|
+
db.pragma('foreign_keys = ON');
|
|
126
|
+
try {
|
|
127
|
+
db.prepare(`INSERT INTO event_dispatches (event_id, handler_type, handler_name, target_role, notice_type, started_at, ended_at, status, error)
|
|
128
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`).run(opts.eventId, opts.handlerType, opts.handlerName, opts.targetRole ?? null, opts.noticeType ?? null, opts.startedAt, opts.endedAt, opts.status, opts.error ?? null);
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
db.close();
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
|
package/dist/guild-config.d.ts
CHANGED
|
@@ -15,7 +15,7 @@ export interface RoleDefinition {
|
|
|
15
15
|
}
|
|
16
16
|
/** A reference to a tool or engine registered in guild.json. */
|
|
17
17
|
export interface ToolEntry {
|
|
18
|
-
/** Upstream package identifier, e.g. "@shardworks/tool-
|
|
18
|
+
/** Upstream package identifier, e.g. "@shardworks/tool-commission@1.11.3". Null for locally-built tools. */
|
|
19
19
|
upstream: string | null;
|
|
20
20
|
/** ISO-8601 timestamp of when the tool was installed. */
|
|
21
21
|
installedAt: string;
|
|
@@ -24,6 +24,31 @@ export interface ToolEntry {
|
|
|
24
24
|
/** Bundle that delivered this artifact, e.g. "@shardworks/guild-starter-kit@0.1.0". */
|
|
25
25
|
bundle?: string;
|
|
26
26
|
}
|
|
27
|
+
/** A custom event declaration in guild.json clockworks.events. */
|
|
28
|
+
export interface EventDeclaration {
|
|
29
|
+
/** Human-readable description of what this event means. */
|
|
30
|
+
description?: string;
|
|
31
|
+
/** Optional payload schema hint (not enforced in Phase 1). */
|
|
32
|
+
schema?: Record<string, string>;
|
|
33
|
+
}
|
|
34
|
+
/** A standing order — a registered response to an event. */
|
|
35
|
+
export type StandingOrder = {
|
|
36
|
+
on: string;
|
|
37
|
+
run: string;
|
|
38
|
+
} | {
|
|
39
|
+
on: string;
|
|
40
|
+
summon: string;
|
|
41
|
+
} | {
|
|
42
|
+
on: string;
|
|
43
|
+
brief: string;
|
|
44
|
+
};
|
|
45
|
+
/** The clockworks configuration block in guild.json. */
|
|
46
|
+
export interface ClockworksConfig {
|
|
47
|
+
/** Custom event declarations. */
|
|
48
|
+
events?: Record<string, EventDeclaration>;
|
|
49
|
+
/** Standing orders — event → action mappings. */
|
|
50
|
+
standingOrders?: StandingOrder[];
|
|
51
|
+
}
|
|
27
52
|
/** A reference to a curriculum or temperament registered in guild.json. */
|
|
28
53
|
export interface TrainingEntry {
|
|
29
54
|
/** Upstream package identifier, or null for locally-authored content. */
|
|
@@ -33,6 +58,13 @@ export interface TrainingEntry {
|
|
|
33
58
|
/** Bundle that delivered this artifact, e.g. "@shardworks/guild-starter-kit@0.1.0". */
|
|
34
59
|
bundle?: string;
|
|
35
60
|
}
|
|
61
|
+
/** A registered workshop — a repository where the guild does its work. */
|
|
62
|
+
export interface WorkshopEntry {
|
|
63
|
+
/** Git remote URL (the clone source). */
|
|
64
|
+
remoteUrl: string;
|
|
65
|
+
/** ISO-8601 timestamp of when the workshop was added. */
|
|
66
|
+
addedAt: string;
|
|
67
|
+
}
|
|
36
68
|
/** The guild's central configuration file shape (`guild.json`). */
|
|
37
69
|
export interface GuildConfig {
|
|
38
70
|
/** Guild name — used as the guildhall npm package name. */
|
|
@@ -41,8 +73,8 @@ export interface GuildConfig {
|
|
|
41
73
|
nexus: string;
|
|
42
74
|
/** Default model for anima sessions. */
|
|
43
75
|
model: string;
|
|
44
|
-
/** Registered
|
|
45
|
-
workshops: string
|
|
76
|
+
/** Registered workshops indexed by name. */
|
|
77
|
+
workshops: Record<string, WorkshopEntry>;
|
|
46
78
|
/** Guild roles — structural positions that animas fill. */
|
|
47
79
|
roles: Record<string, RoleDefinition>;
|
|
48
80
|
/** Tools available to all animas regardless of role. */
|
|
@@ -55,6 +87,8 @@ export interface GuildConfig {
|
|
|
55
87
|
curricula: Record<string, TrainingEntry>;
|
|
56
88
|
/** Available temperaments indexed by name. */
|
|
57
89
|
temperaments: Record<string, TrainingEntry>;
|
|
90
|
+
/** Clockworks configuration — events, standing orders. */
|
|
91
|
+
clockworks?: ClockworksConfig;
|
|
58
92
|
}
|
|
59
93
|
/**
|
|
60
94
|
* Create the default guild.json content for a new guild.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guild-config.d.ts","sourceRoot":"","sources":["../src/guild-config.ts"],"names":[],"mappings":"AAGA,uEAAuE;AACvE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,wEAAwE;IACxE,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,
|
|
1
|
+
{"version":3,"file":"guild-config.d.ts","sourceRoot":"","sources":["../src/guild-config.ts"],"names":[],"mappings":"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"}
|
package/dist/guild-config.js
CHANGED
package/dist/guild-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guild-config.js","sourceRoot":"","sources":["../src/guild-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"guild-config.js","sourceRoot":"","sources":["../src/guild-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAgG7B;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAY,EAAE,YAAoB,EAAE,KAAa;IACxF,OAAO;QACL,IAAI;QACJ,KAAK,EAAE,YAAY;QACnB,KAAK;QACL,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,EAAE;QACb,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,YAAY,EAAE,EAAE;KACjB,CAAC;AACJ,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AACvC,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAgB,CAAC;AACzE,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAmB;IAChE,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACzC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvE,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
export declare const VERSION: string;
|
|
2
2
|
export { type ToolContext, type ToolDefinition, tool, } from './tool.ts';
|
|
3
|
+
export { type GuildEvent, type EngineContext, type EngineDefinition, engine, isClockworkEngine, } from './engine.ts';
|
|
4
|
+
export { signalEvent, validateCustomEvent, isFrameworkEvent, readPendingEvents, readEvent, markEventProcessed, recordDispatch, } from './events.ts';
|
|
5
|
+
export { type TickResult, type DispatchSummary, type ClockRunResult, type SummonHandler, clockTick, clockRun, registerSummonHandler, } from './clockworks.ts';
|
|
3
6
|
export { createLedger } from './ledger.ts';
|
|
4
|
-
export { type GuildConfig, type RoleDefinition, type ToolEntry, type TrainingEntry, createInitialGuildConfig, guildConfigPath, readGuildConfig, writeGuildConfig, } from './guild-config.ts';
|
|
7
|
+
export { type GuildConfig, type RoleDefinition, type ToolEntry, type TrainingEntry, type WorkshopEntry, type EventDeclaration, type StandingOrder, type ClockworksConfig, createInitialGuildConfig, guildConfigPath, readGuildConfig, writeGuildConfig, } from './guild-config.ts';
|
|
5
8
|
export { findGuildRoot, nexusDir, ledgerPath, worktreesPath, workshopsPath, workshopBarePath, } from './nexus-home.ts';
|
|
6
9
|
export { type InstallToolOptions, type InstallResult, type SourceKind, classifySource, installTool, } from './install-tool.ts';
|
|
7
10
|
export { type RemoveToolOptions, type RemoveResult, removeTool, } from './remove-tool.ts';
|
|
8
|
-
export { type
|
|
11
|
+
export { type CommissionOptions, type CommissionResult, commission, updateCommissionStatus, readCommission, } from './commission.ts';
|
|
9
12
|
export { type InstantiateOptions, type InstantiateResult, instantiate, } from './instantiate.ts';
|
|
10
13
|
export { initGuild } from './init-guild.ts';
|
|
11
14
|
export { type BundleManifest, type BundlePackageEntry, type BundleContentEntry, type BundleMigrationEntry, type InstallBundleOptions, type InstallBundleResult, readBundleManifest, installBundle, isBundleDir, } from './bundle.ts';
|
|
12
15
|
export { type RehydrateResult, rehydrate, } from './rehydrate.ts';
|
|
16
|
+
export { type AddWorkshopOptions, type AddWorkshopResult, type RemoveWorkshopOptions, type WorkshopInfo, type CreateWorkshopOptions, addWorkshop, removeWorkshop, listWorkshops, createWorkshop, checkGhAuth, deriveWorkshopName, } from './workshop.ts';
|
|
13
17
|
export { type Precondition, type CommandPrecondition, type CommandOutputPrecondition, type EnvPrecondition, type PreconditionCheckResult, type ToolPreconditionResult, readPreconditions, checkOne, checkPreconditions, checkAllPreconditions, checkToolPreconditions, } from './preconditions.ts';
|
|
14
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,EAAE,MAAqB,CAAC;AAE5C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,OAAO,EAAE,MAAqB,CAAC;AAE5C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,MAAM,EACN,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,KAAK,UAAU,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,UAAU,EACf,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,UAAU,EACV,sBAAsB,EACtB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,eAAe,EACpB,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC1B,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,15 +4,19 @@ const _require = createRequire(import.meta.url);
|
|
|
4
4
|
const _pkg = _require('../package.json');
|
|
5
5
|
export const VERSION = _pkg.version;
|
|
6
6
|
export { tool, } from "./tool.js";
|
|
7
|
+
export { engine, isClockworkEngine, } from "./engine.js";
|
|
8
|
+
export { signalEvent, validateCustomEvent, isFrameworkEvent, readPendingEvents, readEvent, markEventProcessed, recordDispatch, } from "./events.js";
|
|
9
|
+
export { clockTick, clockRun, registerSummonHandler, } from "./clockworks.js";
|
|
7
10
|
export { createLedger } from "./ledger.js";
|
|
8
11
|
export { createInitialGuildConfig, guildConfigPath, readGuildConfig, writeGuildConfig, } from "./guild-config.js";
|
|
9
12
|
export { findGuildRoot, nexusDir, ledgerPath, worktreesPath, workshopsPath, workshopBarePath, } from "./nexus-home.js";
|
|
10
13
|
export { classifySource, installTool, } from "./install-tool.js";
|
|
11
14
|
export { removeTool, } from "./remove-tool.js";
|
|
12
|
-
export {
|
|
15
|
+
export { commission, updateCommissionStatus, readCommission, } from "./commission.js";
|
|
13
16
|
export { instantiate, } from "./instantiate.js";
|
|
14
17
|
export { initGuild } from "./init-guild.js";
|
|
15
18
|
export { readBundleManifest, installBundle, isBundleDir, } from "./bundle.js";
|
|
16
19
|
export { rehydrate, } from "./rehydrate.js";
|
|
20
|
+
export { addWorkshop, removeWorkshop, listWorkshops, createWorkshop, checkGhAuth, deriveWorkshopName, } from "./workshop.js";
|
|
17
21
|
export { readPreconditions, checkOne, checkPreconditions, checkAllPreconditions, checkToolPreconditions, } from "./preconditions.js";
|
|
18
22
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC;AAE5C,OAAO,EAGL,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAEtE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChD,MAAM,IAAI,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AACzC,MAAM,CAAC,MAAM,OAAO,GAAW,IAAI,CAAC,OAAO,CAAC;AAE5C,OAAO,EAGL,IAAI,GACL,MAAM,WAAW,CAAC;AAEnB,OAAO,EAIL,MAAM,EACN,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,cAAc,GACf,MAAM,aAAa,CAAC;AAErB,OAAO,EAKL,SAAS,EACT,QAAQ,EACR,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EASL,wBAAwB,EACxB,eAAe,EACf,eAAe,EACf,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,EACV,aAAa,EACb,aAAa,EACb,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAIL,cAAc,EACd,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAGL,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAGL,UAAU,EACV,sBAAsB,EACtB,cAAc,GACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAGL,WAAW,GACZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAOL,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,WAAW,EACX,kBAAkB,GACnB,MAAM,eAAe,CAAC;AACvB,OAAO,EAOL,iBAAiB,EACjB,QAAQ,EACR,kBAAkB,EAClB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC"}
|
package/dist/init-guild.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-guild.d.ts","sourceRoot":"","sources":["../src/init-guild.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"init-guild.d.ts","sourceRoot":"","sources":["../src/init-guild.ts"],"names":[],"mappings":"AAUA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAuJzE"}
|
package/dist/init-guild.js
CHANGED
|
@@ -60,8 +60,55 @@ export function initGuild(home, name, model) {
|
|
|
60
60
|
// Write codex placeholder
|
|
61
61
|
fs.writeFileSync(path.join(home, 'codex/all.md'), '');
|
|
62
62
|
// Write default role instruction files
|
|
63
|
-
fs.writeFileSync(path.join(home, 'roles/advisor.md'),
|
|
64
|
-
|
|
63
|
+
fs.writeFileSync(path.join(home, 'roles/advisor.md'), [
|
|
64
|
+
'# Advisor',
|
|
65
|
+
'',
|
|
66
|
+
'You are a guild advisor — a standing member who helps the patron understand and operate the guild.',
|
|
67
|
+
'',
|
|
68
|
+
'## Purpose',
|
|
69
|
+
'',
|
|
70
|
+
'You are the patron\'s primary point of contact with the guild. You explain how things work, report on guild state, suggest next steps, and help the patron frame their intentions as commissions. You are the guild\'s institutional memory made conversational.',
|
|
71
|
+
'',
|
|
72
|
+
'## What You Do',
|
|
73
|
+
'',
|
|
74
|
+
'- **Answer questions** about guild structure, capabilities, and current state.',
|
|
75
|
+
'- **Report status** — animas on the roster, active commissions, workshop state, tool inventory.',
|
|
76
|
+
'- **Help frame commissions** — when the patron has a vague idea, help them refine it into a clear brief that an artificer can act on.',
|
|
77
|
+
'- **Explain outcomes** — when a commission completes or fails, help the patron understand what happened and what to do next.',
|
|
78
|
+
'- **Suggest actions** — if you see something that needs attention (a failed commission, a missing tool, an empty roster), proactively surface it.',
|
|
79
|
+
'',
|
|
80
|
+
'## What You Don\'t Do',
|
|
81
|
+
'',
|
|
82
|
+
'- **You do not implement.** You don\'t write code, build features, or modify workshops. If the patron asks you to build something, help them commission it instead.',
|
|
83
|
+
'- **You do not modify guild state** without explicit direction from the patron. You read and report; you don\'t unilaterally change things.',
|
|
84
|
+
'- **You do not speak for other animas.** Report what the ledger says, not what you imagine another anima would think.',
|
|
85
|
+
'',
|
|
86
|
+
].join('\n'));
|
|
87
|
+
fs.writeFileSync(path.join(home, 'roles/artificer.md'), [
|
|
88
|
+
'# Artificer',
|
|
89
|
+
'',
|
|
90
|
+
'You are a guild artificer — you undertake commissions and build the works the patron has asked for.',
|
|
91
|
+
'',
|
|
92
|
+
'## Purpose',
|
|
93
|
+
'',
|
|
94
|
+
'You are the guild\'s hands. When the patron commissions work, you receive the brief (and sage advice, if a sage is active), and you build the thing. Your output is the guild\'s works — running software, usable tools, solved problems.',
|
|
95
|
+
'',
|
|
96
|
+
'## What You Do',
|
|
97
|
+
'',
|
|
98
|
+
'- **Execute commissions** — receive a brief, understand the requirements, and deliver working results.',
|
|
99
|
+
'- **Work in workshops** — your work happens in commission worktrees. Each commission gives you an isolated workspace branched from main.',
|
|
100
|
+
'- **Write clear code** with useful comments and commit messages. Your primary audience is the next anima who continues the work.',
|
|
101
|
+
'- **Test your work** before marking a commission complete. Verify that what you built actually works.',
|
|
102
|
+
'- **Signal events** when notable things happen during your work — use `craft.question` for design decisions outside your scope, and `craft.debt` for tech debt or code smells you observe but intentionally leave alone.',
|
|
103
|
+
'',
|
|
104
|
+
'## What You Don\'t Do',
|
|
105
|
+
'',
|
|
106
|
+
'- **You do not plan commissions.** That\'s the sage\'s job. If a brief is unclear, ask for clarification rather than inventing requirements.',
|
|
107
|
+
'- **You do not modify guild infrastructure.** You work in workshops, not in the guildhall. Tools, roles, and configuration are not your concern.',
|
|
108
|
+
'- **You do not contradict sage advice.** If a sage has provided a plan, follow it. If you believe the plan has a flaw, record your concern in a commit message or comment, but execute the plan as given.',
|
|
109
|
+
'',
|
|
110
|
+
].join('\n'));
|
|
111
|
+
// Write guild.json — with default roles, clockworks events, empty registries
|
|
65
112
|
const config = createInitialGuildConfig(name, VERSION, model);
|
|
66
113
|
config.roles = {
|
|
67
114
|
advisor: {
|
|
@@ -69,6 +116,28 @@ export function initGuild(home, name, model) {
|
|
|
69
116
|
tools: [],
|
|
70
117
|
instructions: 'roles/advisor.md',
|
|
71
118
|
},
|
|
119
|
+
artificer: {
|
|
120
|
+
seats: null,
|
|
121
|
+
tools: [],
|
|
122
|
+
instructions: 'roles/artificer.md',
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
config.clockworks = {
|
|
126
|
+
events: {
|
|
127
|
+
'craft.question': {
|
|
128
|
+
description: 'An artificer encountered a design decision outside the commission scope that needs attention.',
|
|
129
|
+
schema: { summary: 'string', workshop: 'string', commission: 'string?', context: 'string?' },
|
|
130
|
+
},
|
|
131
|
+
'craft.debt': {
|
|
132
|
+
description: 'An artificer observed tech debt or a code smell but intentionally did not address it.',
|
|
133
|
+
schema: { summary: 'string', workshop: 'string', commission: 'string?', location: 'string?' },
|
|
134
|
+
},
|
|
135
|
+
},
|
|
136
|
+
standingOrders: [
|
|
137
|
+
{ on: 'commission.posted', run: 'workshop-prepare' },
|
|
138
|
+
{ on: 'commission.ready', summon: 'artificer' },
|
|
139
|
+
{ on: 'commission.session.ended', run: 'workshop-merge' },
|
|
140
|
+
],
|
|
72
141
|
};
|
|
73
142
|
fs.writeFileSync(path.join(home, 'guild.json'), JSON.stringify(config, null, 2) + '\n');
|
|
74
143
|
// Make the guildhall an npm package so guild tools can be installed as
|
package/dist/init-guild.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-guild.js","sourceRoot":"","sources":["../src/init-guild.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,SAAS,GAAG,CAAC,IAAc,EAAE,GAAY;IACvC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AACpD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY,EAAE,IAAY,EAAE,KAAa;IACjE,kBAAkB;IAClB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,2BAA2B,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAED,4CAA4C;IAC5C,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpB,yCAAyC;IACzC,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1E,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,qCAAqC;IACrC,MAAM,IAAI,GAAG;QACX,kBAAkB;QAClB,OAAO;QACP,SAAS;QACT,OAAO;QACP,OAAO;QACP,oBAAoB;QACpB,uBAAuB;KACxB,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAClC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,0BAA0B;IAC1B,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,EAAE,CAAC,CAAC;IAEtD,uCAAuC;IACvC,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,
|
|
1
|
+
{"version":3,"file":"init-guild.js","sourceRoot":"","sources":["../src/init-guild.ts"],"names":[],"mappings":"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"}
|
package/dist/ledger.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** SQL for the initial Ledger schema (001). Creates all base tables with WAL mode and foreign keys. */
|
|
2
|
-
export declare const INITIAL_SCHEMA = "\nPRAGMA journal_mode = WAL;\nPRAGMA foreign_keys = ON;\n\nCREATE TABLE animas (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n status TEXT NOT NULL CHECK(status IN ('aspirant', 'active', 'retired')),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE anima_compositions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n anima_id INTEGER NOT NULL UNIQUE REFERENCES animas(id),\n curriculum_name TEXT NOT NULL,\n curriculum_version TEXT NOT NULL,\n temperament_name TEXT NOT NULL,\n temperament_version TEXT NOT NULL,\n curriculum_snapshot TEXT NOT NULL,\n temperament_snapshot TEXT NOT NULL,\n composed_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE roster (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n anima_id INTEGER NOT NULL REFERENCES animas(id),\n role TEXT NOT NULL,\n standing INTEGER NOT NULL DEFAULT 0,\n assigned_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE commissions (\n id
|
|
2
|
+
export declare const INITIAL_SCHEMA = "\nPRAGMA journal_mode = WAL;\nPRAGMA foreign_keys = ON;\n\nCREATE TABLE animas (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n status TEXT NOT NULL CHECK(status IN ('aspirant', 'active', 'retired')),\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE anima_compositions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n anima_id INTEGER NOT NULL UNIQUE REFERENCES animas(id),\n curriculum_name TEXT NOT NULL,\n curriculum_version TEXT NOT NULL,\n temperament_name TEXT NOT NULL,\n temperament_version TEXT NOT NULL,\n curriculum_snapshot TEXT NOT NULL,\n temperament_snapshot TEXT NOT NULL,\n composed_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE roster (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n anima_id INTEGER NOT NULL REFERENCES animas(id),\n role TEXT NOT NULL,\n standing INTEGER NOT NULL DEFAULT 0,\n assigned_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE commissions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n status TEXT NOT NULL CHECK(status IN ('posted', 'assigned', 'in_progress', 'completed', 'failed')),\n status_reason TEXT,\n workshop TEXT NOT NULL,\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\n);\n\nCREATE TABLE commission_assignments (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n commission_id INTEGER NOT NULL REFERENCES commissions(id),\n anima_id INTEGER NOT NULL REFERENCES animas(id),\n assigned_at TEXT NOT NULL DEFAULT (datetime('now')),\n UNIQUE(commission_id, anima_id)\n);\n\nCREATE TABLE audit_log (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n actor TEXT NOT NULL,\n action TEXT NOT NULL,\n target_type TEXT,\n target_id INTEGER,\n detail TEXT,\n timestamp TEXT NOT NULL DEFAULT (datetime('now'))\n);\n";
|
|
3
3
|
/**
|
|
4
4
|
* Create a new Ledger database at the given path and apply the initial schema.
|
|
5
5
|
* @param dbPath - Absolute path where the SQLite file will be created.
|
package/dist/ledger.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,eAAO,MAAM,cAAc,
|
|
1
|
+
{"version":3,"file":"ledger.d.ts","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAEA,uGAAuG;AACvG,eAAO,MAAM,cAAc,6rEA2D1B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAOjD"}
|
package/dist/ledger.js
CHANGED
|
@@ -33,12 +33,13 @@ CREATE TABLE roster (
|
|
|
33
33
|
);
|
|
34
34
|
|
|
35
35
|
CREATE TABLE commissions (
|
|
36
|
-
id
|
|
37
|
-
content
|
|
38
|
-
status
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
36
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
37
|
+
content TEXT NOT NULL,
|
|
38
|
+
status TEXT NOT NULL CHECK(status IN ('posted', 'assigned', 'in_progress', 'completed', 'failed')),
|
|
39
|
+
status_reason TEXT,
|
|
40
|
+
workshop TEXT NOT NULL,
|
|
41
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
42
|
+
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
42
43
|
);
|
|
43
44
|
|
|
44
45
|
CREATE TABLE commission_assignments (
|
package/dist/ledger.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,uGAAuG;AACvG,MAAM,CAAC,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"ledger.js","sourceRoot":"","sources":["../src/ledger.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,uGAAuG;AACvG,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2D7B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,IAAI,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1B,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAC;IACb,CAAC;AACH,CAAC"}
|
package/dist/rehydrate.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export interface RehydrateResult {
|
|
2
|
+
/** Workshop bare clones restored from remote URLs. */
|
|
3
|
+
workshopsCloned: string[];
|
|
4
|
+
/** Workshops that failed to clone (name + error message). */
|
|
5
|
+
workshopsFailed: {
|
|
6
|
+
name: string;
|
|
7
|
+
error: string;
|
|
8
|
+
}[];
|
|
2
9
|
/** Tools restored from package.json (registry/git-url). */
|
|
3
10
|
fromPackageJson: number;
|
|
4
11
|
/** Tools restored from on-disk source (workshop/tarball). */
|
package/dist/rehydrate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehydrate.d.ts","sourceRoot":"","sources":["../src/rehydrate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"rehydrate.d.ts","sourceRoot":"","sources":["../src/rehydrate.ts"],"names":[],"mappings":"AA0BA,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,6DAA6D;IAC7D,eAAe,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACnD,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,6DAA6D;IAC7D,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,yCAAyC;IACzC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAoFvD"}
|
package/dist/rehydrate.js
CHANGED
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* rehydrate — reconstruct
|
|
2
|
+
* rehydrate — reconstruct runtime state from git-tracked guild state.
|
|
3
3
|
*
|
|
4
|
-
* After a fresh clone, the guild's node_modules is empty
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* After a fresh clone, the guild's node_modules is empty and workshop bare
|
|
5
|
+
* clones are missing. This function:
|
|
6
|
+
* 1. Re-clones workshop bare repos from their remote URLs in guild.json
|
|
7
|
+
* 2. Runs `npm install` to resolve registry/git-url deps from package.json
|
|
8
|
+
* 3. For each tool with full source on disk (workshop/tarball), runs
|
|
7
9
|
* `npm install --no-save <tool-path>` to install from the tracked source
|
|
8
|
-
*
|
|
10
|
+
* 4. Reports any linked tools that need to be re-linked manually
|
|
9
11
|
*/
|
|
10
12
|
import fs from 'node:fs';
|
|
11
13
|
import path from 'node:path';
|
|
12
14
|
import { execFileSync } from 'node:child_process';
|
|
13
15
|
import { readGuildConfig } from "./guild-config.js";
|
|
16
|
+
import { workshopBarePath, workshopsPath } from "./nexus-home.js";
|
|
14
17
|
/** Map category -> on-disk parent directory (relative to guild root). */
|
|
15
18
|
const DIR_MAP = {
|
|
16
19
|
tools: 'tools',
|
|
@@ -25,11 +28,34 @@ const DIR_MAP = {
|
|
|
25
28
|
*/
|
|
26
29
|
export function rehydrate(home) {
|
|
27
30
|
const result = {
|
|
31
|
+
workshopsCloned: [],
|
|
32
|
+
workshopsFailed: [],
|
|
28
33
|
fromPackageJson: 0,
|
|
29
34
|
fromSlotSource: [],
|
|
30
35
|
needsRelink: [],
|
|
31
36
|
};
|
|
32
|
-
// 1.
|
|
37
|
+
// 1. Re-clone workshop bare repos from guild.json remote URLs
|
|
38
|
+
const config = readGuildConfig(home);
|
|
39
|
+
const wsDir = workshopsPath(home);
|
|
40
|
+
fs.mkdirSync(wsDir, { recursive: true });
|
|
41
|
+
for (const [name, entry] of Object.entries(config.workshops)) {
|
|
42
|
+
const barePath = workshopBarePath(home, name);
|
|
43
|
+
if (fs.existsSync(barePath))
|
|
44
|
+
continue; // already cloned
|
|
45
|
+
try {
|
|
46
|
+
execFileSync('git', ['clone', '--bare', entry.remoteUrl, barePath], {
|
|
47
|
+
stdio: 'pipe',
|
|
48
|
+
});
|
|
49
|
+
result.workshopsCloned.push(name);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
result.workshopsFailed.push({
|
|
53
|
+
name,
|
|
54
|
+
error: err.message,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// 2. Run npm install to resolve registry/git-url deps from package.json
|
|
33
59
|
const pkgPath = path.join(home, 'package.json');
|
|
34
60
|
if (fs.existsSync(pkgPath)) {
|
|
35
61
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
@@ -39,8 +65,7 @@ export function rehydrate(home) {
|
|
|
39
65
|
result.fromPackageJson = depCount;
|
|
40
66
|
}
|
|
41
67
|
}
|
|
42
|
-
//
|
|
43
|
-
const config = readGuildConfig(home);
|
|
68
|
+
// 3. Scan guild.json for tools that have full source on disk
|
|
44
69
|
for (const [category, registry] of Object.entries({
|
|
45
70
|
tools: config.tools,
|
|
46
71
|
engines: config.engines,
|
package/dist/rehydrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rehydrate.js","sourceRoot":"","sources":["../src/rehydrate.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"rehydrate.js","sourceRoot":"","sources":["../src/rehydrate.ts"],"names":[],"mappings":"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"}
|