@synctek/forgeos 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.
Files changed (143) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +386 -0
  3. package/dist/cli/commands/analyze.d.ts +14 -0
  4. package/dist/cli/commands/analyze.d.ts.map +1 -0
  5. package/dist/cli/commands/analyze.js +94 -0
  6. package/dist/cli/commands/analyze.js.map +1 -0
  7. package/dist/cli/commands/build.d.ts +11 -0
  8. package/dist/cli/commands/build.d.ts.map +1 -0
  9. package/dist/cli/commands/build.js +86 -0
  10. package/dist/cli/commands/build.js.map +1 -0
  11. package/dist/cli/commands/changeset.d.ts +13 -0
  12. package/dist/cli/commands/changeset.d.ts.map +1 -0
  13. package/dist/cli/commands/changeset.js +174 -0
  14. package/dist/cli/commands/changeset.js.map +1 -0
  15. package/dist/cli/commands/evidence.d.ts +12 -0
  16. package/dist/cli/commands/evidence.d.ts.map +1 -0
  17. package/dist/cli/commands/evidence.js +94 -0
  18. package/dist/cli/commands/evidence.js.map +1 -0
  19. package/dist/cli/commands/federation.d.ts +13 -0
  20. package/dist/cli/commands/federation.d.ts.map +1 -0
  21. package/dist/cli/commands/federation.js +127 -0
  22. package/dist/cli/commands/federation.js.map +1 -0
  23. package/dist/cli/commands/gate.d.ts +15 -0
  24. package/dist/cli/commands/gate.d.ts.map +1 -0
  25. package/dist/cli/commands/gate.js +178 -0
  26. package/dist/cli/commands/gate.js.map +1 -0
  27. package/dist/cli/commands/initiative.d.ts +13 -0
  28. package/dist/cli/commands/initiative.d.ts.map +1 -0
  29. package/dist/cli/commands/initiative.js +130 -0
  30. package/dist/cli/commands/initiative.js.map +1 -0
  31. package/dist/cli/commands/mind.d.ts +16 -0
  32. package/dist/cli/commands/mind.d.ts.map +1 -0
  33. package/dist/cli/commands/mind.js +139 -0
  34. package/dist/cli/commands/mind.js.map +1 -0
  35. package/dist/cli/commands/outcome.d.ts +12 -0
  36. package/dist/cli/commands/outcome.d.ts.map +1 -0
  37. package/dist/cli/commands/outcome.js +85 -0
  38. package/dist/cli/commands/outcome.js.map +1 -0
  39. package/dist/cli/commands/project.d.ts +13 -0
  40. package/dist/cli/commands/project.d.ts.map +1 -0
  41. package/dist/cli/commands/project.js +128 -0
  42. package/dist/cli/commands/project.js.map +1 -0
  43. package/dist/cli/commands/review.d.ts +15 -0
  44. package/dist/cli/commands/review.d.ts.map +1 -0
  45. package/dist/cli/commands/review.js +167 -0
  46. package/dist/cli/commands/review.js.map +1 -0
  47. package/dist/cli/commands/score.d.ts +17 -0
  48. package/dist/cli/commands/score.d.ts.map +1 -0
  49. package/dist/cli/commands/score.js +168 -0
  50. package/dist/cli/commands/score.js.map +1 -0
  51. package/dist/cli/commands/session.d.ts +13 -0
  52. package/dist/cli/commands/session.d.ts.map +1 -0
  53. package/dist/cli/commands/session.js +133 -0
  54. package/dist/cli/commands/session.js.map +1 -0
  55. package/dist/cli/commands/trust.d.ts +16 -0
  56. package/dist/cli/commands/trust.d.ts.map +1 -0
  57. package/dist/cli/commands/trust.js +261 -0
  58. package/dist/cli/commands/trust.js.map +1 -0
  59. package/dist/cli/index.d.ts +19 -0
  60. package/dist/cli/index.d.ts.map +1 -0
  61. package/dist/cli/index.js +99 -0
  62. package/dist/cli/index.js.map +1 -0
  63. package/dist/cli/output.d.ts +48 -0
  64. package/dist/cli/output.d.ts.map +1 -0
  65. package/dist/cli/output.js +139 -0
  66. package/dist/cli/output.js.map +1 -0
  67. package/dist/client.d.ts +46 -0
  68. package/dist/client.d.ts.map +1 -0
  69. package/dist/client.js +146 -0
  70. package/dist/client.js.map +1 -0
  71. package/dist/handlers.d.ts +11 -0
  72. package/dist/handlers.d.ts.map +1 -0
  73. package/dist/handlers.js +424 -0
  74. package/dist/handlers.js.map +1 -0
  75. package/dist/http-server.d.ts +25 -0
  76. package/dist/http-server.d.ts.map +1 -0
  77. package/dist/http-server.js +246 -0
  78. package/dist/http-server.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +40 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/mcp/handlers.d.ts +11 -0
  84. package/dist/mcp/handlers.d.ts.map +1 -0
  85. package/dist/mcp/handlers.js +553 -0
  86. package/dist/mcp/handlers.js.map +1 -0
  87. package/dist/mcp/http-server.d.ts +25 -0
  88. package/dist/mcp/http-server.d.ts.map +1 -0
  89. package/dist/mcp/http-server.js +246 -0
  90. package/dist/mcp/http-server.js.map +1 -0
  91. package/dist/mcp/index.d.ts +3 -0
  92. package/dist/mcp/index.d.ts.map +1 -0
  93. package/dist/mcp/index.js +40 -0
  94. package/dist/mcp/index.js.map +1 -0
  95. package/dist/mcp/tools.d.ts +944 -0
  96. package/dist/mcp/tools.d.ts.map +1 -0
  97. package/dist/mcp/tools.js +531 -0
  98. package/dist/mcp/tools.js.map +1 -0
  99. package/dist/shared/client.d.ts +59 -0
  100. package/dist/shared/client.d.ts.map +1 -0
  101. package/dist/shared/client.js +171 -0
  102. package/dist/shared/client.js.map +1 -0
  103. package/dist/shared/errors.d.ts +25 -0
  104. package/dist/shared/errors.d.ts.map +1 -0
  105. package/dist/shared/errors.js +44 -0
  106. package/dist/shared/errors.js.map +1 -0
  107. package/dist/shared/types.d.ts +111 -0
  108. package/dist/shared/types.d.ts.map +1 -0
  109. package/dist/shared/types.js +10 -0
  110. package/dist/shared/types.js.map +1 -0
  111. package/dist/tools.d.ts +944 -0
  112. package/dist/tools.d.ts.map +1 -0
  113. package/dist/tools.js +513 -0
  114. package/dist/tools.js.map +1 -0
  115. package/dist/trust/chain.d.ts +86 -0
  116. package/dist/trust/chain.d.ts.map +1 -0
  117. package/dist/trust/chain.js +176 -0
  118. package/dist/trust/chain.js.map +1 -0
  119. package/dist/trust/git-binding.d.ts +61 -0
  120. package/dist/trust/git-binding.d.ts.map +1 -0
  121. package/dist/trust/git-binding.js +133 -0
  122. package/dist/trust/git-binding.js.map +1 -0
  123. package/dist/trust/index.d.ts +20 -0
  124. package/dist/trust/index.d.ts.map +1 -0
  125. package/dist/trust/index.js +17 -0
  126. package/dist/trust/index.js.map +1 -0
  127. package/dist/trust/ledger.d.ts +144 -0
  128. package/dist/trust/ledger.d.ts.map +1 -0
  129. package/dist/trust/ledger.js +351 -0
  130. package/dist/trust/ledger.js.map +1 -0
  131. package/dist/trust/signing.d.ts +134 -0
  132. package/dist/trust/signing.d.ts.map +1 -0
  133. package/dist/trust/signing.js +249 -0
  134. package/dist/trust/signing.js.map +1 -0
  135. package/dist/trust/transmission.d.ts +129 -0
  136. package/dist/trust/transmission.d.ts.map +1 -0
  137. package/dist/trust/transmission.js +390 -0
  138. package/dist/trust/transmission.js.map +1 -0
  139. package/dist/types.d.ts +183 -0
  140. package/dist/types.d.ts.map +1 -0
  141. package/dist/types.js +3 -0
  142. package/dist/types.js.map +1 -0
  143. package/package.json +61 -0
@@ -0,0 +1,167 @@
1
+ /**
2
+ * `forge review` — Review operations.
3
+ *
4
+ * Subcommands:
5
+ * forge review request --project <pid> --changeset <cid> --role <role>
6
+ * forge review submit --project <pid> --changeset <cid> --review <rid>
7
+ * --status <status> --notes <notes>
8
+ * forge review list --project <pid> --changeset <cid>
9
+ * forge review approve --project <pid> --changeset <cid> --review <rid>
10
+ * forge review block --project <pid> --changeset <cid> --review <rid> --reason <reason>
11
+ */
12
+ import { formatTable, formatJSON, formatSuccess, formatError, green, yellow, red, } from "../output.js";
13
+ function reviewStatusColor(status) {
14
+ const s = status.toLowerCase();
15
+ if (s === "approved")
16
+ return green(status);
17
+ if (s === "pending")
18
+ return yellow(status);
19
+ if (s === "blocked")
20
+ return red(status);
21
+ return status;
22
+ }
23
+ export function registerReviewCommands(parent, client) {
24
+ const review = parent
25
+ .command("review")
26
+ .description("Manage changeset reviews");
27
+ // -------------------------------------------------------------------------
28
+ // review request
29
+ // -------------------------------------------------------------------------
30
+ review
31
+ .command("request")
32
+ .description("Request a review for a changeset")
33
+ .requiredOption("-p, --project <pid>", "Project ID")
34
+ .requiredOption("--changeset <cid>", "Changeset ID")
35
+ .requiredOption("--role <role>", "Review role: architect | qa_test | security | performance | reliability")
36
+ .option("--json", "Output raw JSON")
37
+ .action(async (opts) => {
38
+ try {
39
+ const data = (await client.post(`/api/projects/${opts.project}/changesets/${opts.changeset}/reviews`, { role: opts.role }));
40
+ if (opts.json) {
41
+ console.log(formatJSON(data));
42
+ return;
43
+ }
44
+ console.log(formatSuccess(`Review requested: ${data.id}`));
45
+ console.log(formatTable(["Field", "Value"], [
46
+ ["ID", data.id],
47
+ ["Role", data.role],
48
+ ["Status", data.status],
49
+ ]));
50
+ }
51
+ catch (err) {
52
+ console.error(formatError(err));
53
+ process.exit(1);
54
+ }
55
+ });
56
+ // -------------------------------------------------------------------------
57
+ // review submit
58
+ // -------------------------------------------------------------------------
59
+ review
60
+ .command("submit")
61
+ .description("Submit a review verdict")
62
+ .requiredOption("-p, --project <pid>", "Project ID")
63
+ .requiredOption("--changeset <cid>", "Changeset ID")
64
+ .requiredOption("--review <rid>", "Review ID")
65
+ .requiredOption("--status <status>", "Verdict: approved | blocked | pending")
66
+ .requiredOption("--notes <notes>", "Review summary notes")
67
+ .option("--json", "Output raw JSON")
68
+ .action(async (opts) => {
69
+ try {
70
+ const data = (await client.patch(`/api/projects/${opts.project}/changesets/${opts.changeset}/reviews/${opts.review}`, { status: opts.status, notes: opts.notes }));
71
+ if (opts.json) {
72
+ console.log(formatJSON(data));
73
+ return;
74
+ }
75
+ console.log(formatSuccess(`Review ${opts.review} updated: ${opts.status}`));
76
+ }
77
+ catch (err) {
78
+ console.error(formatError(err));
79
+ process.exit(1);
80
+ }
81
+ });
82
+ // -------------------------------------------------------------------------
83
+ // review list
84
+ // -------------------------------------------------------------------------
85
+ review
86
+ .command("list")
87
+ .description("List reviews for a changeset")
88
+ .requiredOption("-p, --project <pid>", "Project ID")
89
+ .requiredOption("--changeset <cid>", "Changeset ID")
90
+ .option("--json", "Output raw JSON")
91
+ .action(async (opts) => {
92
+ try {
93
+ const data = await client.get(`/api/projects/${opts.project}/changesets/${opts.changeset}/reviews`);
94
+ if (opts.json) {
95
+ console.log(formatJSON(data));
96
+ return;
97
+ }
98
+ const items = Array.isArray(data)
99
+ ? data
100
+ : (data.reviews ?? []);
101
+ if (items.length === 0) {
102
+ console.log("No reviews found for this changeset.");
103
+ return;
104
+ }
105
+ console.log(formatTable(["ID", "Role", "Status", "Findings"], items.map((r) => [
106
+ r.id,
107
+ r.role,
108
+ reviewStatusColor(r.status),
109
+ String(r.findings?.length ?? 0),
110
+ ])));
111
+ }
112
+ catch (err) {
113
+ console.error(formatError(err));
114
+ process.exit(1);
115
+ }
116
+ });
117
+ // -------------------------------------------------------------------------
118
+ // review approve
119
+ // -------------------------------------------------------------------------
120
+ review
121
+ .command("approve")
122
+ .description("Approve a review")
123
+ .requiredOption("-p, --project <pid>", "Project ID")
124
+ .requiredOption("--changeset <cid>", "Changeset ID")
125
+ .requiredOption("--review <rid>", "Review ID")
126
+ .option("--json", "Output raw JSON")
127
+ .action(async (opts) => {
128
+ try {
129
+ const data = await client.post(`/api/projects/${opts.project}/changesets/${opts.changeset}/reviews/${opts.review}/approve`);
130
+ if (opts.json) {
131
+ console.log(formatJSON(data));
132
+ return;
133
+ }
134
+ console.log(formatSuccess(`Review ${opts.review} approved.`));
135
+ }
136
+ catch (err) {
137
+ console.error(formatError(err));
138
+ process.exit(1);
139
+ }
140
+ });
141
+ // -------------------------------------------------------------------------
142
+ // review block
143
+ // -------------------------------------------------------------------------
144
+ review
145
+ .command("block")
146
+ .description("Block a review with a reason")
147
+ .requiredOption("-p, --project <pid>", "Project ID")
148
+ .requiredOption("--changeset <cid>", "Changeset ID")
149
+ .requiredOption("--review <rid>", "Review ID")
150
+ .requiredOption("--reason <reason>", "Reason for blocking")
151
+ .option("--json", "Output raw JSON")
152
+ .action(async (opts) => {
153
+ try {
154
+ const data = await client.post(`/api/projects/${opts.project}/changesets/${opts.changeset}/reviews/${opts.review}/block`, { reason: opts.reason });
155
+ if (opts.json) {
156
+ console.log(formatJSON(data));
157
+ return;
158
+ }
159
+ console.log(formatSuccess(`Review ${opts.review} blocked.`));
160
+ }
161
+ catch (err) {
162
+ console.error(formatError(err));
163
+ process.exit(1);
164
+ }
165
+ });
166
+ }
167
+ //# sourceMappingURL=review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review.js","sourceRoot":"","sources":["../../../src/cli/commands/review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * `forge score` — Local trust score computation.
3
+ *
4
+ * Reads the local trust ledger and computes a 4-dimension quality score:
5
+ * - quality — ratio of high-confidence entries
6
+ * - velocity — entries per day over ledger lifetime
7
+ * - consistency — regularity of commit intervals (low stddev = high score)
8
+ * - collaboration — ratio of entries with source_tree_hash (git-bound)
9
+ *
10
+ * All computation is LOCAL — no engine HTTP calls.
11
+ *
12
+ * Usage:
13
+ * forge score [path]
14
+ */
15
+ import { Command } from "commander";
16
+ export declare function registerScoreCommands(parent: Command, _client: unknown): void;
17
+ //# sourceMappingURL=score.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/score.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0HpC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,GACf,IAAI,CA6EN"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * `forge score` — Local trust score computation.
3
+ *
4
+ * Reads the local trust ledger and computes a 4-dimension quality score:
5
+ * - quality — ratio of high-confidence entries
6
+ * - velocity — entries per day over ledger lifetime
7
+ * - consistency — regularity of commit intervals (low stddev = high score)
8
+ * - collaboration — ratio of entries with source_tree_hash (git-bound)
9
+ *
10
+ * All computation is LOCAL — no engine HTTP calls.
11
+ *
12
+ * Usage:
13
+ * forge score [path]
14
+ */
15
+ import { resolve } from "path";
16
+ import { TrustLedger } from "../../trust/ledger.js";
17
+ import { formatTable, formatJSON, formatSuccess, formatWarning, formatError, green, yellow, red, } from "../output.js";
18
+ function scoreColor(n) {
19
+ const pct = Math.round(n * 100);
20
+ const label = `${pct}%`;
21
+ if (n >= 0.75)
22
+ return green(label);
23
+ if (n >= 0.5)
24
+ return yellow(label);
25
+ return red(label);
26
+ }
27
+ /**
28
+ * Compute standard deviation of an array of numbers.
29
+ * Returns 0 for empty or single-element arrays.
30
+ */
31
+ function stddev(values) {
32
+ if (values.length <= 1)
33
+ return 0;
34
+ const mean = values.reduce((a, b) => a + b, 0) / values.length;
35
+ const variance = values.reduce((sum, v) => sum + (v - mean) ** 2, 0) / values.length;
36
+ return Math.sqrt(variance);
37
+ }
38
+ /**
39
+ * Compute all 4 trust score dimensions from ledger entries.
40
+ */
41
+ function computeScore(entries, chainValid) {
42
+ const count = entries.length;
43
+ if (count === 0) {
44
+ return {
45
+ quality: 0,
46
+ velocity: 0,
47
+ consistency: 0,
48
+ collaboration: 0,
49
+ overall: 0,
50
+ entry_count: 0,
51
+ chain_valid: chainValid,
52
+ computed_at: new Date().toISOString(),
53
+ };
54
+ }
55
+ // 1. Quality — ratio of entries whose payload has quality_score >= 70 OR
56
+ // high confidence (confidence >= 0.8) if it's an observation entry.
57
+ // Fallback: count entries without explicit failure markers.
58
+ const qualityCount = entries.filter((e) => {
59
+ const p = e.payload;
60
+ if (typeof p.quality_score === "number")
61
+ return p.quality_score >= 70;
62
+ if (typeof p.confidence === "number")
63
+ return p.confidence >= 0.8;
64
+ // Assume passing if no quality indicator
65
+ return true;
66
+ }).length;
67
+ const quality = qualityCount / count;
68
+ // 2. Velocity — entries per day over the ledger's active lifetime.
69
+ // Normalised to [0, 1] with a target of 3 entries/day = 1.0.
70
+ const TARGET_ENTRIES_PER_DAY = 3;
71
+ const firstTs = new Date(entries[0].timestamp).getTime();
72
+ const lastTs = new Date(entries[count - 1].timestamp).getTime();
73
+ const spanDays = Math.max((lastTs - firstTs) / 86_400_000, 1);
74
+ const rawVelocity = count / spanDays;
75
+ const velocity = Math.min(rawVelocity / TARGET_ENTRIES_PER_DAY, 1.0);
76
+ // 3. Consistency — inverse of normalised interval standard deviation.
77
+ // Perfect regularity (equal intervals) = 1.0.
78
+ let consistency = 1.0;
79
+ if (count > 2) {
80
+ const timestamps = entries.map((e) => new Date(e.timestamp).getTime());
81
+ const intervals = [];
82
+ for (let i = 1; i < timestamps.length; i++) {
83
+ intervals.push(timestamps[i] - timestamps[i - 1]);
84
+ }
85
+ const meanInterval = intervals.reduce((a, b) => a + b, 0) / intervals.length;
86
+ const sd = stddev(intervals);
87
+ // Coefficient of variation; 0 = perfectly regular
88
+ const cv = meanInterval > 0 ? sd / meanInterval : 0;
89
+ consistency = Math.max(0, 1 - Math.min(cv, 1));
90
+ }
91
+ // 4. Collaboration — ratio of entries that have a git binding (source_tree_hash)
92
+ const gitBoundCount = entries.filter((e) => e.source_tree_hash !== null && e.source_tree_hash !== undefined).length;
93
+ const collaboration = gitBoundCount / count;
94
+ const overall = (quality + velocity + consistency + collaboration) / 4;
95
+ return {
96
+ quality,
97
+ velocity,
98
+ consistency,
99
+ collaboration,
100
+ overall,
101
+ entry_count: count,
102
+ chain_valid: chainValid,
103
+ computed_at: new Date().toISOString(),
104
+ };
105
+ }
106
+ export function registerScoreCommands(parent, _client // not used — all score commands are local
107
+ ) {
108
+ parent
109
+ .command("score [path]")
110
+ .description("Compute a 4-dimension trust score from the local ledger (local only)")
111
+ .option("--json", "Output raw JSON")
112
+ .action(async (pathArg, opts) => {
113
+ try {
114
+ const projectPath = resolve(pathArg ?? process.cwd());
115
+ const ledger = new TrustLedger(projectPath);
116
+ const verifyResult = ledger.verifyChain();
117
+ const entries = ledger.readEntries();
118
+ const score = computeScore(entries, verifyResult.valid);
119
+ if (opts.json) {
120
+ console.log(formatJSON(score));
121
+ return;
122
+ }
123
+ if (entries.length === 0) {
124
+ console.log(formatWarning("No ledger entries found. Run `forge trust init` then `forge analyze` to start tracking."));
125
+ return;
126
+ }
127
+ console.log(formatTable(["Dimension", "Score", "Description"], [
128
+ [
129
+ "Quality",
130
+ scoreColor(score.quality),
131
+ "Ratio of high-quality / high-confidence entries",
132
+ ],
133
+ [
134
+ "Velocity",
135
+ scoreColor(score.velocity),
136
+ "Entries per day vs 3/day target",
137
+ ],
138
+ [
139
+ "Consistency",
140
+ scoreColor(score.consistency),
141
+ "Regularity of commit intervals",
142
+ ],
143
+ [
144
+ "Collaboration",
145
+ scoreColor(score.collaboration),
146
+ "Ratio of git-bound entries",
147
+ ],
148
+ ["──────────", "──────", "──────────────────────────────────────"],
149
+ [
150
+ "Overall",
151
+ scoreColor(score.overall),
152
+ `${score.entry_count} entries · chain ${score.chain_valid ? "valid" : "BROKEN"}`,
153
+ ],
154
+ ]));
155
+ if (!verifyResult.valid) {
156
+ console.log(formatWarning(`Chain integrity broken at seq ${verifyResult.first_break_at}. Run \`forge trust verify\` for details.`));
157
+ }
158
+ else {
159
+ console.log(formatSuccess(`Score computed from ${score.entry_count} ledger entries.`));
160
+ }
161
+ }
162
+ catch (err) {
163
+ console.error(formatError(err));
164
+ process.exit(1);
165
+ }
166
+ });
167
+ }
168
+ //# sourceMappingURL=score.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"score.js","sourceRoot":"","sources":["../../../src/cli/commands/score.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * `forge session` — Session management commands.
3
+ *
4
+ * Subcommands:
5
+ * forge session start --project <pid>
6
+ * forge session end --project <pid> <session_id>
7
+ * forge session status --project <pid> <session_id>
8
+ * forge session task --project <pid> <session_id> --description <desc>
9
+ */
10
+ import { Command } from "commander";
11
+ import { ForgeOSClient } from "../../shared/client.js";
12
+ export declare function registerSessionCommands(parent: Command, client: ForgeOSClient): void;
13
+ //# sourceMappingURL=session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAmBvD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,OAAO,EACf,MAAM,EAAE,aAAa,GACpB,IAAI,CAmJN"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * `forge session` — Session management commands.
3
+ *
4
+ * Subcommands:
5
+ * forge session start --project <pid>
6
+ * forge session end --project <pid> <session_id>
7
+ * forge session status --project <pid> <session_id>
8
+ * forge session task --project <pid> <session_id> --description <desc>
9
+ */
10
+ import { formatTable, formatJSON, formatSuccess, formatError, green, yellow, } from "../output.js";
11
+ function sessionStatusColor(status) {
12
+ const s = status.toLowerCase();
13
+ if (s === "active")
14
+ return green(status);
15
+ if (s === "ended" || s === "closed")
16
+ return yellow(status);
17
+ return status;
18
+ }
19
+ export function registerSessionCommands(parent, client) {
20
+ const session = parent
21
+ .command("session")
22
+ .description("Manage development sessions");
23
+ // -------------------------------------------------------------------------
24
+ // session start
25
+ // -------------------------------------------------------------------------
26
+ session
27
+ .command("start")
28
+ .description("Start a new session for a project")
29
+ .requiredOption("-p, --project <pid>", "Project ID")
30
+ .option("--developer-id <did>", "Developer identifier", "local")
31
+ .option("--json", "Output raw JSON")
32
+ .action(async (opts) => {
33
+ try {
34
+ const body = {
35
+ developer_id: opts.developerId,
36
+ };
37
+ const data = (await client.post(`/api/projects/${opts.project}/sessions`, body));
38
+ if (opts.json) {
39
+ console.log(formatJSON(data));
40
+ return;
41
+ }
42
+ console.log(formatSuccess(`Session started: ${data.id}`));
43
+ console.log(formatTable(["Field", "Value"], [
44
+ ["ID", data.id],
45
+ ["Project", data.project_id],
46
+ ["Status", sessionStatusColor(data.status)],
47
+ ["Started At", data.started_at],
48
+ ]));
49
+ }
50
+ catch (err) {
51
+ console.error(formatError(err));
52
+ process.exit(1);
53
+ }
54
+ });
55
+ // -------------------------------------------------------------------------
56
+ // session end <session_id>
57
+ // -------------------------------------------------------------------------
58
+ session
59
+ .command("end <session_id>")
60
+ .description("End an active session")
61
+ .requiredOption("-p, --project <pid>", "Project ID")
62
+ .option("--json", "Output raw JSON")
63
+ .action(async (sessionId, opts) => {
64
+ try {
65
+ const data = (await client.patch(`/api/projects/${opts.project}/sessions/${sessionId}`, { status: "ended" }));
66
+ if (opts.json) {
67
+ console.log(formatJSON(data));
68
+ return;
69
+ }
70
+ console.log(formatSuccess(`Session ${sessionId} ended.`));
71
+ if (data.ended_at) {
72
+ console.log(` Ended at: ${data.ended_at}`);
73
+ }
74
+ }
75
+ catch (err) {
76
+ console.error(formatError(err));
77
+ process.exit(1);
78
+ }
79
+ });
80
+ // -------------------------------------------------------------------------
81
+ // session status <session_id>
82
+ // -------------------------------------------------------------------------
83
+ session
84
+ .command("status <session_id>")
85
+ .description("Show session status")
86
+ .requiredOption("-p, --project <pid>", "Project ID")
87
+ .option("--json", "Output raw JSON")
88
+ .action(async (sessionId, opts) => {
89
+ try {
90
+ const data = (await client.get(`/api/projects/${opts.project}/sessions/${sessionId}`));
91
+ if (opts.json) {
92
+ console.log(formatJSON(data));
93
+ return;
94
+ }
95
+ console.log(formatTable(["Field", "Value"], [
96
+ ["ID", data.id],
97
+ ["Project", data.project_id],
98
+ ["Status", sessionStatusColor(data.status)],
99
+ ["Started At", data.started_at],
100
+ ["Ended At", data.ended_at ?? "—"],
101
+ ]));
102
+ }
103
+ catch (err) {
104
+ console.error(formatError(err));
105
+ process.exit(1);
106
+ }
107
+ });
108
+ // -------------------------------------------------------------------------
109
+ // session task <session_id>
110
+ // -------------------------------------------------------------------------
111
+ session
112
+ .command("task <session_id>")
113
+ .description("Add a task to an active session")
114
+ .requiredOption("-p, --project <pid>", "Project ID")
115
+ .requiredOption("--description <desc>", "Task description")
116
+ .option("--json", "Output raw JSON")
117
+ .action(async (sessionId, opts) => {
118
+ try {
119
+ const data = await client.post(`/api/projects/${opts.project}/sessions/${sessionId}/tasks`, { description: opts.description });
120
+ if (opts.json) {
121
+ console.log(formatJSON(data));
122
+ return;
123
+ }
124
+ console.log(formatSuccess("Task added to session."));
125
+ console.log(formatJSON(data));
126
+ }
127
+ catch (err) {
128
+ console.error(formatError(err));
129
+ process.exit(1);
130
+ }
131
+ });
132
+ }
133
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/cli/commands/session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * `forge trust` — Local trust ledger commands.
3
+ *
4
+ * These commands operate ENTIRELY locally — no engine HTTP calls.
5
+ * They use the src/trust/ modules directly.
6
+ *
7
+ * Subcommands:
8
+ * forge trust init [path] — generate keypair + create ledger dirs
9
+ * forge trust verify [path] — verify chain integrity
10
+ * forge trust stats [path] — show chain statistics
11
+ * forge trust share [path] [--endpoint <url>] — transmit shareable metadata
12
+ * forge trust config [path] — show key configuration
13
+ */
14
+ import { Command } from "commander";
15
+ export declare function registerTrustCommands(parent: Command, _client: unknown): void;
16
+ //# sourceMappingURL=trust.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/trust.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8CpC,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,OAAO,GACf,IAAI,CAyRN"}