agentpack-cli 0.1.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 (61) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +174 -0
  3. package/SECURITY.md +44 -0
  4. package/assets/agentpack-logo.jpg +0 -0
  5. package/dist/src/agentpack.d.ts +2 -0
  6. package/dist/src/agentpack.js +8 -0
  7. package/dist/src/agentpack.js.map +1 -0
  8. package/dist/src/cli/index.d.ts +3 -0
  9. package/dist/src/cli/index.js +412 -0
  10. package/dist/src/cli/index.js.map +1 -0
  11. package/dist/src/core/budget.d.ts +14 -0
  12. package/dist/src/core/budget.js +56 -0
  13. package/dist/src/core/budget.js.map +1 -0
  14. package/dist/src/core/checkpoints.d.ts +24 -0
  15. package/dist/src/core/checkpoints.js +93 -0
  16. package/dist/src/core/checkpoints.js.map +1 -0
  17. package/dist/src/core/doctor.d.ts +4 -0
  18. package/dist/src/core/doctor.js +304 -0
  19. package/dist/src/core/doctor.js.map +1 -0
  20. package/dist/src/core/git.d.ts +2 -0
  21. package/dist/src/core/git.js +34 -0
  22. package/dist/src/core/git.js.map +1 -0
  23. package/dist/src/core/hash.d.ts +5 -0
  24. package/dist/src/core/hash.js +29 -0
  25. package/dist/src/core/hash.js.map +1 -0
  26. package/dist/src/core/ids.d.ts +1 -0
  27. package/dist/src/core/ids.js +7 -0
  28. package/dist/src/core/ids.js.map +1 -0
  29. package/dist/src/core/presets.d.ts +12 -0
  30. package/dist/src/core/presets.js +24 -0
  31. package/dist/src/core/presets.js.map +1 -0
  32. package/dist/src/core/redaction.d.ts +4 -0
  33. package/dist/src/core/redaction.js +18 -0
  34. package/dist/src/core/redaction.js.map +1 -0
  35. package/dist/src/core/resume.d.ts +13 -0
  36. package/dist/src/core/resume.js +398 -0
  37. package/dist/src/core/resume.js.map +1 -0
  38. package/dist/src/core/store.d.ts +20 -0
  39. package/dist/src/core/store.js +240 -0
  40. package/dist/src/core/store.js.map +1 -0
  41. package/dist/src/core/types.d.ts +43 -0
  42. package/dist/src/core/types.js +2 -0
  43. package/dist/src/core/types.js.map +1 -0
  44. package/dist/src/integrations/install.d.ts +5 -0
  45. package/dist/src/integrations/install.js +361 -0
  46. package/dist/src/integrations/install.js.map +1 -0
  47. package/dist/src/mcp/server.d.ts +9 -0
  48. package/dist/src/mcp/server.js +347 -0
  49. package/dist/src/mcp/server.js.map +1 -0
  50. package/dist/src/operations.d.ts +29 -0
  51. package/dist/src/operations.js +199 -0
  52. package/dist/src/operations.js.map +1 -0
  53. package/docs/DOGFOOD.md +72 -0
  54. package/docs/INTEGRATIONS.md +183 -0
  55. package/docs/MCP.md +83 -0
  56. package/docs/MVP.md +97 -0
  57. package/docs/ROADMAP.md +129 -0
  58. package/docs/SETUP.md +56 -0
  59. package/docs/agentpack-flow.md +63 -0
  60. package/package.json +55 -0
  61. package/scripts/mcp-smoke.mjs +197 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../../../src/core/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,MAAM,UAAU,MAAM,CAAC,OAAwB;IAC7C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,QAAgB;IACzC,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,SAAiB,EAAE,KAAgD;IAC7G,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEpC,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,iDAAiD,SAAS,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,YAAY,CAAC;QACjC,IAAI,EAAE,UAAU,CAAC,YAAY,CAAC;QAC9B,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;QACjC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACpC,GAAG,KAAK;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAAgB;IAC5C,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function createId(prefix: string): string;
@@ -0,0 +1,7 @@
1
+ import { randomBytes } from "node:crypto";
2
+ export function createId(prefix) {
3
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
4
+ const suffix = randomBytes(3).toString("hex");
5
+ return `${prefix}_${stamp}_${suffix}`;
6
+ }
7
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../../src/core/ids.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC7D,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,GAAG,MAAM,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;AACxC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export declare const BUDGET_PRESETS: {
2
+ readonly quick: 1200;
3
+ readonly chat: 4000;
4
+ readonly agent: 8000;
5
+ readonly deep: 16000;
6
+ };
7
+ export type BudgetPreset = keyof typeof BUDGET_PRESETS;
8
+ export declare function resolveBudget(input: {
9
+ budget?: number;
10
+ preset?: string;
11
+ }, fallback?: number): number;
12
+ export declare function formatBudgetPresets(): string;
@@ -0,0 +1,24 @@
1
+ export const BUDGET_PRESETS = {
2
+ quick: 1200,
3
+ chat: 4000,
4
+ agent: 8000,
5
+ deep: 16000
6
+ };
7
+ export function resolveBudget(input, fallback = 0) {
8
+ if (input.budget && input.budget > 0) {
9
+ return input.budget;
10
+ }
11
+ if (input.preset && isBudgetPreset(input.preset)) {
12
+ return BUDGET_PRESETS[input.preset];
13
+ }
14
+ return fallback;
15
+ }
16
+ export function formatBudgetPresets() {
17
+ return Object.entries(BUDGET_PRESETS)
18
+ .map(([name, budget]) => `${name}: ${budget}`)
19
+ .join(", ");
20
+ }
21
+ function isBudgetPreset(value) {
22
+ return value === "quick" || value === "chat" || value === "agent" || value === "deep";
23
+ }
24
+ //# sourceMappingURL=presets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.js","sourceRoot":"","sources":["../../../src/core/presets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,KAAK;CACH,CAAC;AAIX,MAAM,UAAU,aAAa,CAAC,KAA2C,EAAE,QAAQ,GAAG,CAAC;IACrF,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrC,OAAO,KAAK,CAAC,MAAM,CAAC;IACtB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACjD,OAAO,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC;SAClC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,KAAK,MAAM,EAAE,CAAC;SAC7C,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,OAAO,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,CAAC;AACxF,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function redact(text: string, config?: {
2
+ redactions?: string[];
3
+ }): string;
4
+ export declare function redactForRoot(root: string, text: string): string;
@@ -0,0 +1,18 @@
1
+ import { getPackPath, readJson } from "./store.js";
2
+ const SECRET_VALUE_PATTERN = /((api[_-]?key|token|secret|password)\s*[:=]\s*)(["']?)[^\s"']+/gi;
3
+ export function redact(text, config = {}) {
4
+ let output = String(text || "");
5
+ output = output.replace(SECRET_VALUE_PATTERN, "$1$3[REDACTED]");
6
+ for (const name of config.redactions || []) {
7
+ const value = process.env[name];
8
+ if (value) {
9
+ output = output.split(value).join(`[REDACTED:${name}]`);
10
+ }
11
+ }
12
+ return output;
13
+ }
14
+ export function redactForRoot(root, text) {
15
+ const config = readJson(getPackPath(root, "config.json"), {});
16
+ return redact(text, config);
17
+ }
18
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/core/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGnD,MAAM,oBAAoB,GAAG,kEAAkE,CAAC;AAEhG,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,SAAoC,EAAE;IACzE,IAAI,MAAM,GAAG,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAEhC,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;IAEhE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,MAAM,GAAG,QAAQ,CAA2B,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface ResumeOptions {
2
+ budget?: number;
3
+ query?: string;
4
+ }
5
+ export declare function buildResume(root: string, options?: ResumeOptions): {
6
+ markdown: string;
7
+ estimatedTokens: number;
8
+ budget: number;
9
+ omittedSections: string[];
10
+ truncatedSections: string[];
11
+ truncated: boolean;
12
+ };
13
+ export {};
@@ -0,0 +1,398 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { estimateTokens, packSections } from "./budget.js";
5
+ import { getGitInfo } from "./git.js";
6
+ import { sha256File } from "./hash.js";
7
+ import { getPackPath, readEvents, readJson, readSources, readState } from "./store.js";
8
+ import { redact } from "./redaction.js";
9
+ export function buildResume(root, options = {}) {
10
+ const budget = Number(options.budget || 0);
11
+ const state = readState(root);
12
+ const config = readJson(getPackPath(root, "config.json"), {});
13
+ const sources = readSources(root).sources || [];
14
+ const events = readEvents(root);
15
+ const git = getGitInfo(root);
16
+ const generatedAt = new Date().toISOString();
17
+ const header = [
18
+ "# Agentpack Resume",
19
+ "",
20
+ `Pack root: ${formatPackRoot(root)}`,
21
+ `Generated: ${generatedAt}`,
22
+ budget ? `Budget: ~${budget} tokens` : "Budget: unbounded",
23
+ options.query ? `Query: ${options.query}` : null
24
+ ].filter(Boolean).join("\n");
25
+ const sections = [
26
+ {
27
+ title: "Current State",
28
+ required: true,
29
+ text: section("Current State", [
30
+ `Goal: ${state.goal || "Not set"}`,
31
+ `Status: ${state.currentStatus || "Not set"}`,
32
+ state.currentCheckpoint ? `Current checkpoint: ${state.currentCheckpoint}` : null,
33
+ "",
34
+ "Next actions:",
35
+ ...(state.nextActions && state.nextActions.length > 0
36
+ ? state.nextActions.map((item) => `- ${item}`)
37
+ : ["- Not set"])
38
+ ])
39
+ },
40
+ {
41
+ title: "Git State",
42
+ required: true,
43
+ text: section("Git State", formatGit(git))
44
+ },
45
+ {
46
+ title: "Source Cache",
47
+ required: true,
48
+ text: section("Source Cache", formatSources(root, sources, options.query))
49
+ },
50
+ {
51
+ title: "Decisions",
52
+ text: section("Decisions", formatEvents(events, "decision"))
53
+ },
54
+ {
55
+ title: "Dead Ends",
56
+ text: section("Dead Ends", formatEvents(events, "dead-end"))
57
+ },
58
+ {
59
+ title: "Evidence",
60
+ text: section("Evidence", formatEvidence(root, events))
61
+ },
62
+ {
63
+ title: "Recent Timeline",
64
+ text: section("Recent Timeline", formatTimeline(events))
65
+ }
66
+ ];
67
+ const { markdown, omittedSections, truncatedSections } = packSections(header, sections, budget);
68
+ const redacted = withStableBudgetMetadata(markdown, config, budget, omittedSections, truncatedSections);
69
+ return {
70
+ markdown: redacted,
71
+ estimatedTokens: estimateTokens(redacted),
72
+ budget,
73
+ omittedSections,
74
+ truncatedSections,
75
+ truncated: truncatedSections.length > 0 || omittedSections.length > 0
76
+ };
77
+ }
78
+ function section(title, lines) {
79
+ const body = lines.filter((line) => line !== null && line !== undefined).join("\n").trimEnd();
80
+ return `## ${title}\n${body || "- No entries yet."}`;
81
+ }
82
+ function formatPackRoot(root) {
83
+ const home = os.homedir();
84
+ const relativeToHome = path.relative(home, root);
85
+ if (relativeToHome && !relativeToHome.startsWith("..") && !path.isAbsolute(relativeToHome)) {
86
+ return path.join("~", relativeToHome);
87
+ }
88
+ return root;
89
+ }
90
+ function formatGit(git) {
91
+ if (!git.available) {
92
+ return ["- Git repository not detected."];
93
+ }
94
+ return [
95
+ `- Branch: ${git.branch || "unknown"}`,
96
+ `- Commit: ${git.head || "unknown"}`,
97
+ "- Changed files:",
98
+ ...(git.status ? git.status.split("\n").map((line) => ` - ${line}`) : [" - None"]),
99
+ git.diff ? `- Current diff characters: ${git.diff.length}` : "- Current diff: none"
100
+ ];
101
+ }
102
+ function formatSources(root, sources, query = "") {
103
+ if (!sources.length) {
104
+ return [
105
+ "- No inspected sources recorded yet.",
106
+ "- Use `agentpack source add <file> --summary <text>` after reading important files."
107
+ ];
108
+ }
109
+ const queryTerms = tokenizeQuery(query);
110
+ const entries = sources.map((source) => {
111
+ const absolutePath = path.join(root, source.path);
112
+ let status = "missing";
113
+ if (existsSync(absolutePath)) {
114
+ status = sha256File(absolutePath) === source.hash ? "unchanged" : "changed";
115
+ }
116
+ const guidance = status === "unchanged"
117
+ ? "Do not re-open unless needed or unless hash changed."
118
+ : "Re-open before relying on prior conclusions.";
119
+ const meaning = status === "unchanged"
120
+ ? "Matches recorded source hash. Summary is current for this file content."
121
+ : "Does not match recorded source hash.";
122
+ return {
123
+ source,
124
+ status,
125
+ meaning,
126
+ guidance,
127
+ score: queryTerms.length > 0 ? scoreSource(source, queryTerms) : 0
128
+ };
129
+ });
130
+ if (!queryTerms.length) {
131
+ return entries.map((entry) => formatSourceEntry(entry, "full"));
132
+ }
133
+ const matched = entries
134
+ .filter((entry) => entry.score > 0 || entry.status !== "unchanged")
135
+ .sort((left, right) => right.score - left.score || left.source.path.localeCompare(right.source.path));
136
+ const matchedPaths = new Set(matched.map((entry) => entry.source.path));
137
+ const unmatched = entries.filter((entry) => !matchedPaths.has(entry.source.path));
138
+ const staleCount = matched.filter((entry) => entry.status !== "unchanged").length;
139
+ if (!matched.length) {
140
+ return [
141
+ `- Query filter: no source summaries matched \`${query}\`; full Source Cache retained to avoid false-negative filtering.`,
142
+ ...entries.map((entry) => formatSourceEntry(entry, "full"))
143
+ ];
144
+ }
145
+ return [
146
+ `- Query filter: full summaries for ${matched.length} relevant or stale source(s), compact stubs for ${unmatched.length} unchanged source(s).`,
147
+ staleCount > 0 ? `- Stale source records shown in full: ${staleCount} changed/missing.` : null,
148
+ "- Compact stubs keep path/status/topic/guidance but omit full summaries to preserve budget.",
149
+ "- For full omitted summaries, call `source_status` or rerun without `--query`.",
150
+ ...matched.map((entry) => formatSourceEntry(entry, "full")),
151
+ ...unmatched.map((entry) => formatSourceEntry(entry, "stub"))
152
+ ].filter((line) => Boolean(line));
153
+ }
154
+ function formatSourceEntry(entry, mode) {
155
+ const lines = [
156
+ `- ${entry.source.path}`,
157
+ ` - status: ${entry.status}`,
158
+ mode === "stub" ? ` - topic: ${topicHint(entry.source.summary)}` : null,
159
+ mode === "full"
160
+ ? ` - summary: ${entry.source.summary || "No summary recorded."}`
161
+ : " - summary: omitted by query filter",
162
+ mode === "full" && entry.source.snippet ? ` - snippet: ${entry.source.snippet}` : null,
163
+ ` - meaning: ${entry.meaning}`,
164
+ ` - guidance: ${entry.guidance}`
165
+ ];
166
+ return lines.filter(Boolean).join("\n");
167
+ }
168
+ const QUERY_STOPWORDS = new Set([
169
+ "about",
170
+ "after",
171
+ "agent",
172
+ "agents",
173
+ "agentpack",
174
+ "cache",
175
+ "code",
176
+ "context",
177
+ "contexts",
178
+ "current",
179
+ "file",
180
+ "files",
181
+ "from",
182
+ "into",
183
+ "source",
184
+ "sources",
185
+ "task",
186
+ "tasks",
187
+ "that",
188
+ "this",
189
+ "with",
190
+ "work",
191
+ "working"
192
+ ]);
193
+ function tokenizeQuery(query) {
194
+ return uniqueTokens(query).filter((term) => !QUERY_STOPWORDS.has(term));
195
+ }
196
+ function scoreSource(source, queryTerms) {
197
+ const basename = path.basename(source.path);
198
+ const pathText = normalizedText(source.path);
199
+ const basenameText = normalizedText(basename);
200
+ const summaryText = normalizedText(source.summary);
201
+ const snippetText = normalizedText(source.snippet);
202
+ const pathTokens = uniqueTokens(source.path);
203
+ const basenameTokens = uniqueTokens(basename);
204
+ const summaryTokens = uniqueTokens(source.summary);
205
+ const snippetTokens = uniqueTokens(source.snippet);
206
+ let score = 0;
207
+ for (const term of queryTerms) {
208
+ score += scoreField(term, basenameText, basenameTokens, 8, 4);
209
+ score += scoreField(term, pathText, pathTokens, 6, 3);
210
+ score += scoreField(term, summaryText, summaryTokens, 3, 1);
211
+ score += scoreField(term, snippetText, snippetTokens, 1, 1);
212
+ }
213
+ return score;
214
+ }
215
+ function scoreField(term, textValue, tokens, exactScore, fuzzyScore) {
216
+ if (tokens.includes(term)) {
217
+ return exactScore;
218
+ }
219
+ if (term.length >= 4 && tokens.some((token) => token.startsWith(term) || term.startsWith(token))) {
220
+ return fuzzyScore;
221
+ }
222
+ return term.length >= 5 && textValue.includes(term) ? Math.max(1, fuzzyScore) : 0;
223
+ }
224
+ function uniqueTokens(value) {
225
+ const seen = new Set();
226
+ const tokens = normalizedText(value)
227
+ .split(/[^a-z0-9]+/u)
228
+ .filter((term) => term.length >= 3);
229
+ for (const token of tokens) {
230
+ seen.add(token);
231
+ }
232
+ return [...seen];
233
+ }
234
+ function normalizedText(value) {
235
+ return String(value || "").toLowerCase();
236
+ }
237
+ function topicHint(summary) {
238
+ const normalized = summary.replace(/\s+/g, " ").trim();
239
+ if (!normalized) {
240
+ return "No summary recorded.";
241
+ }
242
+ const sentenceMatch = normalized.match(/^(.+?[.!?])(?:\s|$)/u);
243
+ return truncateOneLine(sentenceMatch?.[1] || normalized, 80);
244
+ }
245
+ function formatEvents(events, type) {
246
+ const filtered = events.filter((event) => event.type === type);
247
+ if (!filtered.length) {
248
+ return ["- No entries yet."];
249
+ }
250
+ return filtered.slice(-20).map((event) => {
251
+ const files = stringArray(event.files);
252
+ const filesText = files.length ? ` Files: ${files.join(", ")}.` : "";
253
+ const reason = text(event.reason);
254
+ const reasonText = reason ? ` Reason: ${reason}.` : "";
255
+ return `- ${event.ts}: ${text(event.text) || text(event.summary) || "No text."}${reasonText}${filesText}`;
256
+ });
257
+ }
258
+ function formatEvidence(root, events) {
259
+ const evidenceEvents = events.filter((event) => event.type === "evidence");
260
+ if (!evidenceEvents.length) {
261
+ return ["- No evidence attached yet."];
262
+ }
263
+ return evidenceEvents.slice(-20).map((event) => {
264
+ const eventPath = text(event.path);
265
+ const file = eventPath ? getPackPath(root, eventPath) : null;
266
+ const preview = file && existsSync(file)
267
+ ? previewText(readFileSync(file, "utf8"))
268
+ : text(event.content);
269
+ const lines = [
270
+ `- ${event.ts}: ${text(event.kind) || "note"}`,
271
+ text(event.command) ? ` - command: ${text(event.command)}` : null,
272
+ event.exitCode !== undefined && event.exitCode !== null ? ` - exit code: ${String(event.exitCode)}` : null,
273
+ eventPath ? ` - path: ${eventPath}` : null,
274
+ preview ? ` - preview: ${preview}` : null
275
+ ];
276
+ return lines.filter(Boolean).join("\n");
277
+ });
278
+ }
279
+ function formatTimeline(events) {
280
+ if (!events.length) {
281
+ return ["- No events yet."];
282
+ }
283
+ const counts = eventTypeCounts(events);
284
+ const recentCheckpoints = events
285
+ .filter((event) => event.type === "checkpoint")
286
+ .slice(-3)
287
+ .map((event) => ` - ${event.ts}: ${shortLabel(event)}`);
288
+ const recentNonSourceEvents = events
289
+ .filter((event) => event.type !== "source" && event.type !== "checkpoint")
290
+ .slice(-8)
291
+ .map((event) => ` - ${event.ts} [${event.type}] ${shortLabel(event)}`);
292
+ const recentSourcePaths = uniqueRecent(events
293
+ .filter((event) => event.type === "source")
294
+ .map((event) => text(event.path))
295
+ .filter(Boolean), 8);
296
+ return [
297
+ `- Total events: ${events.length} (${counts}).`,
298
+ "- Source details are in Source Cache; evidence details are in Evidence.",
299
+ recentSourcePaths.length ? `- Recent source records: ${recentSourcePaths.join(", ")}` : null,
300
+ recentCheckpoints.length ? "Recent checkpoints:" : null,
301
+ ...recentCheckpoints,
302
+ recentNonSourceEvents.length ? "Recent non-source events:" : null,
303
+ ...recentNonSourceEvents,
304
+ "- Full chronology: `agentpack replay`."
305
+ ].filter((line) => Boolean(line));
306
+ }
307
+ function text(value) {
308
+ return typeof value === "string" ? value : "";
309
+ }
310
+ function stringArray(value) {
311
+ return Array.isArray(value) ? value.filter((item) => typeof item === "string") : [];
312
+ }
313
+ function previewText(value) {
314
+ return value
315
+ .slice(0, 360)
316
+ .replace(/\s+/g, " ")
317
+ .trim();
318
+ }
319
+ function eventTypeCounts(events) {
320
+ const counts = new Map();
321
+ for (const event of events) {
322
+ counts.set(event.type, (counts.get(event.type) || 0) + 1);
323
+ }
324
+ return [...counts.entries()]
325
+ .sort(([left], [right]) => left.localeCompare(right))
326
+ .map(([type, count]) => `${type}: ${count}`)
327
+ .join(", ");
328
+ }
329
+ function shortLabel(event) {
330
+ const label = text(event.text)
331
+ || text(event.summary)
332
+ || text(event.kind)
333
+ || text(event.path)
334
+ || text(event.checkpointId)
335
+ || "No label";
336
+ return truncateOneLine(label, 140);
337
+ }
338
+ function uniqueRecent(values, limit) {
339
+ const output = [];
340
+ const seen = new Set();
341
+ for (const value of [...values].reverse()) {
342
+ if (!seen.has(value)) {
343
+ seen.add(value);
344
+ output.push(value);
345
+ }
346
+ if (output.length >= limit) {
347
+ break;
348
+ }
349
+ }
350
+ return output.reverse();
351
+ }
352
+ function truncateOneLine(value, maxLength) {
353
+ const normalized = value.replace(/\s+/g, " ").trim();
354
+ if (normalized.length <= maxLength) {
355
+ return normalized;
356
+ }
357
+ return `${normalized.slice(0, Math.max(0, maxLength - 1)).trimEnd()}...`;
358
+ }
359
+ function withStableBudgetMetadata(markdown, config, budget, omittedSections, truncatedSections) {
360
+ let estimatedTokens = estimateTokens(redact(markdown, config));
361
+ let redacted = "";
362
+ for (let attempt = 0; attempt < 3; attempt += 1) {
363
+ redacted = redact(addBudgetMetadata(markdown, budget, estimatedTokens, omittedSections, truncatedSections), config);
364
+ const nextEstimate = estimateTokens(redacted);
365
+ if (nextEstimate === estimatedTokens) {
366
+ return redacted;
367
+ }
368
+ estimatedTokens = nextEstimate;
369
+ }
370
+ return redacted;
371
+ }
372
+ function addBudgetMetadata(markdown, budget, estimatedTokens, omittedSections, truncatedSections) {
373
+ const lines = markdown.split("\n");
374
+ const budgetLineIndex = lines.findIndex((line) => line.startsWith("Budget: "));
375
+ if (budgetLineIndex < 0) {
376
+ return markdown;
377
+ }
378
+ const usage = budget
379
+ ? `Estimated usage: ~${estimatedTokens} tokens (${Math.round((estimatedTokens / budget) * 100)}% of target)`
380
+ : `Estimated usage: ~${estimatedTokens} tokens`;
381
+ const status = formatBudgetStatus(budget, omittedSections, truncatedSections);
382
+ lines.splice(budgetLineIndex + 1, 0, usage, `Budget status: ${status}`);
383
+ return lines.join("\n");
384
+ }
385
+ function formatBudgetStatus(budget, omittedSections, truncatedSections) {
386
+ if (!budget) {
387
+ return "unbounded";
388
+ }
389
+ const details = [];
390
+ if (truncatedSections.length > 0) {
391
+ details.push(`truncated ${truncatedSections.join(", ")}`);
392
+ }
393
+ if (omittedSections.length > 0) {
394
+ details.push(`omitted ${omittedSections.join(", ")}`);
395
+ }
396
+ return details.length > 0 ? `limited; ${details.join("; ")}` : "within target";
397
+ }
398
+ //# sourceMappingURL=resume.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resume.js","sourceRoot":"","sources":["../../../src/core/resume.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { AgentpackEvent, AgentpackState, SourcesFile } from "./types.js";
2
+ export declare const PACK_DIR = ".agentpack";
3
+ export declare const SCHEMA_VERSION = 1;
4
+ export declare const AGENTPACK_IGNORE_PATTERNS: string[];
5
+ export declare function findPackRoot(startDir: string): string | null;
6
+ export declare function requirePackRoot(startDir: string): string;
7
+ export declare function initPack(root: string): string;
8
+ export declare function ensurePackIgnored(root: string): void;
9
+ export declare function getPackPath(root: string, ...parts: string[]): string;
10
+ export declare function readJson<T>(filePath: string, fallback: T): T;
11
+ export declare function writeJson(filePath: string, value: unknown): void;
12
+ export declare function writeJsonIfMissing(filePath: string, value: unknown): void;
13
+ export declare function readState(root: string): AgentpackState;
14
+ export declare function writeState(root: string, state: AgentpackState): void;
15
+ export declare function readSources(root: string): SourcesFile;
16
+ export declare function writeSources(root: string, sources: SourcesFile): void;
17
+ export declare function appendEvent(root: string, type: string, payload?: Record<string, unknown>): AgentpackEvent;
18
+ export declare function readEvents(root: string): AgentpackEvent[];
19
+ export declare function listCheckpoints(root: string): string[];
20
+ export declare function withPackWriteLock<T>(root: string, fn: () => T): T;