fourmis-agents-sdk 0.2.0 → 0.2.2

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/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAoBzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,GAAG,KAAK,CAoJR"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,KAAK,EAAqB,MAAM,YAAY,CAAC;AAoBzE;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,YAAY,CAAC;CACxB,GAAG,KAAK,CAqJR"}
package/dist/api.js CHANGED
@@ -2927,9 +2927,11 @@ class TaskManager {
2927
2927
  import { readFileSync as readFileSync4, appendFileSync, mkdirSync as mkdirSync3, readdirSync, statSync } from "fs";
2928
2928
  import { join as join4 } from "path";
2929
2929
  import { homedir as homedir2 } from "os";
2930
+ function sanitizeCwd(cwd) {
2931
+ return cwd.replace(/[/.]/g, "-");
2932
+ }
2930
2933
  function sessionsDir(cwd) {
2931
- const sanitized = cwd.replace(/^\//, "").replace(/\//g, "-");
2932
- return join4(homedir2(), ".claude", "projects", sanitized);
2934
+ return join4(homedir2(), ".claude", "projects", sanitizeCwd(cwd));
2933
2935
  }
2934
2936
  function ensureDir(dir) {
2935
2937
  mkdirSync3(dir, { recursive: true });
@@ -2940,11 +2942,15 @@ function logMessage(dir, sessionId, entry) {
2940
2942
  appendFileSync(filePath, JSON.stringify(entry) + `
2941
2943
  `);
2942
2944
  }
2943
- function createSessionLogger(cwd, sessionId) {
2945
+ function createSessionLogger(cwd, sessionId, model) {
2944
2946
  const dir = sessionsDir(cwd);
2945
2947
  let lastUuid = null;
2946
2948
  return (role, content, parentUuid) => {
2947
2949
  const entryUuid = uuid();
2950
+ let normalizedContent = content;
2951
+ if (role === "user" && typeof content === "string") {
2952
+ normalizedContent = [{ type: "text", text: content }];
2953
+ }
2948
2954
  const entry = {
2949
2955
  type: role,
2950
2956
  uuid: entryUuid,
@@ -2952,7 +2958,14 @@ function createSessionLogger(cwd, sessionId) {
2952
2958
  sessionId,
2953
2959
  timestamp: new Date().toISOString(),
2954
2960
  cwd,
2955
- message: { role, content }
2961
+ isSidechain: false,
2962
+ userType: "external",
2963
+ message: {
2964
+ role,
2965
+ content: normalizedContent,
2966
+ ...role === "assistant" && model ? { model } : {}
2967
+ },
2968
+ ...role === "user" ? { permissionMode: "default" } : {}
2956
2969
  };
2957
2970
  logMessage(dir, sessionId, entry);
2958
2971
  lastUuid = entryUuid;
@@ -2991,10 +3004,23 @@ function loadSessionMessages(cwd, sessionId) {
2991
3004
  for (const line of lines) {
2992
3005
  try {
2993
3006
  const entry = JSON.parse(line);
2994
- messages.push({
2995
- role: entry.type === "user" ? "user" : "assistant",
2996
- content: entry.message.content
2997
- });
3007
+ if (entry.type !== "user" && entry.type !== "assistant")
3008
+ continue;
3009
+ if (entry.isMeta === true)
3010
+ continue;
3011
+ const message = entry.message;
3012
+ if (!message)
3013
+ continue;
3014
+ const role = entry.type === "user" ? "user" : "assistant";
3015
+ let content;
3016
+ if (typeof message.content === "string") {
3017
+ content = message.content;
3018
+ } else if (Array.isArray(message.content)) {
3019
+ content = message.content.filter((c) => c.type === "text" || c.type === "tool_use" || c.type === "tool_result").map((c) => c);
3020
+ } else {
3021
+ continue;
3022
+ }
3023
+ messages.push({ role, content });
2998
3024
  } catch {}
2999
3025
  }
3000
3026
  return messages;
@@ -3016,7 +3042,8 @@ function query(params) {
3016
3042
  const registry = buildToolRegistry(toolNames, options.allowedTools, options.disallowedTools);
3017
3043
  const systemPrompt = options.systemPrompt ?? buildSystemPrompt({
3018
3044
  tools: registry.list(),
3019
- cwd: options.cwd
3045
+ cwd: options.cwd,
3046
+ customPrompt: options.appendSystemPrompt
3020
3047
  });
3021
3048
  let settingsManager;
3022
3049
  let mergedPermissions = options.permissions;
@@ -3063,7 +3090,7 @@ function query(params) {
3063
3090
  }
3064
3091
  }
3065
3092
  const persistSession = options.persistSession !== false;
3066
- const sessionLogger = persistSession ? createSessionLogger(cwd, sessionId) : undefined;
3093
+ const sessionLogger = persistSession ? createSessionLogger(cwd, sessionId, model) : undefined;
3067
3094
  const abortController = new AbortController;
3068
3095
  if (options.signal) {
3069
3096
  options.signal.addEventListener("abort", () => abortController.abort(), { once: true });
package/dist/index.js CHANGED
@@ -2927,9 +2927,11 @@ class TaskManager {
2927
2927
  import { readFileSync as readFileSync4, appendFileSync, mkdirSync as mkdirSync3, readdirSync, statSync } from "fs";
2928
2928
  import { join as join4 } from "path";
2929
2929
  import { homedir as homedir2 } from "os";
2930
+ function sanitizeCwd(cwd) {
2931
+ return cwd.replace(/[/.]/g, "-");
2932
+ }
2930
2933
  function sessionsDir(cwd) {
2931
- const sanitized = cwd.replace(/^\//, "").replace(/\//g, "-");
2932
- return join4(homedir2(), ".claude", "projects", sanitized);
2934
+ return join4(homedir2(), ".claude", "projects", sanitizeCwd(cwd));
2933
2935
  }
2934
2936
  function ensureDir(dir) {
2935
2937
  mkdirSync3(dir, { recursive: true });
@@ -2940,11 +2942,15 @@ function logMessage(dir, sessionId, entry) {
2940
2942
  appendFileSync(filePath, JSON.stringify(entry) + `
2941
2943
  `);
2942
2944
  }
2943
- function createSessionLogger(cwd, sessionId) {
2945
+ function createSessionLogger(cwd, sessionId, model) {
2944
2946
  const dir = sessionsDir(cwd);
2945
2947
  let lastUuid = null;
2946
2948
  return (role, content, parentUuid) => {
2947
2949
  const entryUuid = uuid();
2950
+ let normalizedContent = content;
2951
+ if (role === "user" && typeof content === "string") {
2952
+ normalizedContent = [{ type: "text", text: content }];
2953
+ }
2948
2954
  const entry = {
2949
2955
  type: role,
2950
2956
  uuid: entryUuid,
@@ -2952,7 +2958,14 @@ function createSessionLogger(cwd, sessionId) {
2952
2958
  sessionId,
2953
2959
  timestamp: new Date().toISOString(),
2954
2960
  cwd,
2955
- message: { role, content }
2961
+ isSidechain: false,
2962
+ userType: "external",
2963
+ message: {
2964
+ role,
2965
+ content: normalizedContent,
2966
+ ...role === "assistant" && model ? { model } : {}
2967
+ },
2968
+ ...role === "user" ? { permissionMode: "default" } : {}
2956
2969
  };
2957
2970
  logMessage(dir, sessionId, entry);
2958
2971
  lastUuid = entryUuid;
@@ -2991,10 +3004,23 @@ function loadSessionMessages(cwd, sessionId) {
2991
3004
  for (const line of lines) {
2992
3005
  try {
2993
3006
  const entry = JSON.parse(line);
2994
- messages.push({
2995
- role: entry.type === "user" ? "user" : "assistant",
2996
- content: entry.message.content
2997
- });
3007
+ if (entry.type !== "user" && entry.type !== "assistant")
3008
+ continue;
3009
+ if (entry.isMeta === true)
3010
+ continue;
3011
+ const message = entry.message;
3012
+ if (!message)
3013
+ continue;
3014
+ const role = entry.type === "user" ? "user" : "assistant";
3015
+ let content;
3016
+ if (typeof message.content === "string") {
3017
+ content = message.content;
3018
+ } else if (Array.isArray(message.content)) {
3019
+ content = message.content.filter((c) => c.type === "text" || c.type === "tool_use" || c.type === "tool_result").map((c) => c);
3020
+ } else {
3021
+ continue;
3022
+ }
3023
+ messages.push({ role, content });
2998
3024
  } catch {}
2999
3025
  }
3000
3026
  return messages;
@@ -3016,7 +3042,8 @@ function query(params) {
3016
3042
  const registry = buildToolRegistry(toolNames, options.allowedTools, options.disallowedTools);
3017
3043
  const systemPrompt = options.systemPrompt ?? buildSystemPrompt({
3018
3044
  tools: registry.list(),
3019
- cwd: options.cwd
3045
+ cwd: options.cwd,
3046
+ customPrompt: options.appendSystemPrompt
3020
3047
  });
3021
3048
  let settingsManager;
3022
3049
  let mergedPermissions = options.permissions;
@@ -3063,7 +3090,7 @@ function query(params) {
3063
3090
  }
3064
3091
  }
3065
3092
  const persistSession = options.persistSession !== false;
3066
- const sessionLogger = persistSession ? createSessionLogger(cwd, sessionId) : undefined;
3093
+ const sessionLogger = persistSession ? createSessionLogger(cwd, sessionId, model) : undefined;
3067
3094
  const abortController = new AbortController;
3068
3095
  if (options.signal) {
3069
3096
  options.signal.addEventListener("abort", () => abortController.abort(), { once: true });
package/dist/types.d.ts CHANGED
@@ -173,6 +173,7 @@ export type QueryOptions = {
173
173
  model?: string;
174
174
  cwd?: string;
175
175
  systemPrompt?: string;
176
+ appendSystemPrompt?: string;
176
177
  maxTurns?: number;
177
178
  maxBudgetUsd?: number;
178
179
  maxThinkingTokens?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,wBAAgB,IAAI,IAAI,MAAM,CAE7B;AAID,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,wBAAwB,EAAE,MAAM,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,eAAe,IAAI,UAAU,CAO5C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAOnE;AAID,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,aAAa,GACb,mBAAmB,GACnB,MAAM,GACN,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE1D,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,2BAA2B,GACnC,cAAc,GACd,iBAAiB,GACjB,eAAe,GACf,SAAS,GACT,QAAQ,CAAC;AAEb,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,GAC1H;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,GAC9H;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,KAAK,EAAE,mBAAmB,EAAE,CAAC;IAAC,QAAQ,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,GAC7H;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,cAAc,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,GACnF;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,GAC3F;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,WAAW,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAEnG,MAAM,MAAM,gBAAgB,GACxB;IACE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,kBAAkB,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GACD;IACE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEN,MAAM,MAAM,UAAU,GAAG,CACvB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE;IACP,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,CAAC,EAAE,gBAAgB,EAAE,CAAC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,KACE,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAI/B,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,YAAY,GAAG,gBAAgB,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,SAAS,CAAC;IACnB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACvC,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,iBAAiB,GAAG,iBAAiB,GAAG,kBAAkB,CAAC;IACpE,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,WAAW,GACX,WAAW,GACX,cAAc,GACd,iBAAiB,GACjB,aAAa,GACb,aAAa,GACb,YAAY,GACZ,aAAa,CAAC;AAIlB;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iEAAiE;IACjE,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC;IACzC,kDAAkD;IAClD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC;CACzC,CAAC;AAIF,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAIzD,MAAM,MAAM,YAAY,GAAG;IAEzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAG3B,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,cAAc,CAAC,EAAE,aAAa,EAAE,CAAC;IAGjC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAG9B,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,YAAY,EAAE,SAAS,EAAE,OAAO,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;IAGpG,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,gBAAgB,EAAE,eAAe,CAAC,CAAC;IAGtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,mBAAmB,EAAE,eAAe,CAAC,CAAC;IAGrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B,CAAC;AAIF,MAAM,WAAW,KAAM,SAAQ,aAAa,CAAC,YAAY,CAAC;IACxD,IAAI,CAAC,GAAG,IAAI,EAAE,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,KAAK,EAAE,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IACrF,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC,CAAC;IAC3D,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,IAAI,IAAI,CAAC;CACf"}
@@ -3,8 +3,18 @@
3
3
  *
4
4
  * Sessions are stored as one JSON object per line in:
5
5
  * ~/.claude/projects/{sanitized-cwd}/{sessionId}.jsonl
6
+ *
7
+ * Path sanitization matches Claude SDK: replace `/` and `.` with `-`.
8
+ * /root/.fourmis/workspaces/doremi → -root--fourmis-workspaces-doremi
6
9
  */
7
10
  import type { NormalizedMessage, NormalizedContent } from "../providers/types.js";
11
+ /**
12
+ * JSONL entry — compatible with Claude SDK session format.
13
+ *
14
+ * Claude SDK entries include additional fields (isSidechain, userType, version,
15
+ * gitBranch, permissionMode, message.model, message.usage, requestId, etc.)
16
+ * that we include for compatibility. When loading, we only need type + message.
17
+ */
8
18
  export type SessionEntry = {
9
19
  type: "user" | "assistant";
10
20
  uuid: string;
@@ -12,11 +22,22 @@ export type SessionEntry = {
12
22
  sessionId: string;
13
23
  timestamp: string;
14
24
  cwd: string;
25
+ isSidechain: boolean;
26
+ userType: string;
15
27
  message: {
16
28
  role: string;
17
29
  content: NormalizedContent[] | string;
30
+ model?: string;
18
31
  };
32
+ permissionMode?: string;
19
33
  };
34
+ /**
35
+ * Sanitize a cwd path to a directory name, matching Claude SDK convention.
36
+ * Replaces `/` and `.` with `-`.
37
+ * /root/dev/fourmis → -root-dev-fourmis
38
+ * /root/.fourmis/workspaces/doremi → -root--fourmis-workspaces-doremi
39
+ */
40
+ export declare function sanitizeCwd(cwd: string): string;
20
41
  /**
21
42
  * Returns the sessions directory for a given cwd.
22
43
  * Path: ~/.claude/projects/{sanitized-cwd}/
@@ -28,8 +49,9 @@ export declare function sessionsDir(cwd: string): string;
28
49
  export declare function logMessage(dir: string, sessionId: string, entry: SessionEntry): void;
29
50
  /**
30
51
  * Create a session logger function for use in the agent loop.
52
+ * Returns a function that logs messages and returns the entry UUID.
31
53
  */
32
- export declare function createSessionLogger(cwd: string, sessionId: string): (role: "user" | "assistant", content: NormalizedContent[] | string, parentUuid: string | null) => string;
54
+ export declare function createSessionLogger(cwd: string, sessionId: string, model?: string): (role: "user" | "assistant", content: NormalizedContent[] | string, parentUuid: string | null) => string;
33
55
  /**
34
56
  * Find the most recent session file in the sessions directory for a cwd.
35
57
  * Returns the sessionId (filename without .jsonl) or null.
@@ -37,6 +59,7 @@ export declare function createSessionLogger(cwd: string, sessionId: string): (ro
37
59
  export declare function findLatestSession(cwd: string): string | null;
38
60
  /**
39
61
  * Load messages from a session JSONL file and reconstruct NormalizedMessage[].
62
+ * Skips non-message entries (file-history-snapshot, queue-operation, system, progress).
40
63
  */
41
64
  export declare function loadSessionMessages(cwd: string, sessionId: string): NormalizedMessage[];
42
65
  //# sourceMappingURL=session-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAKlF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;KACvC,CAAC;CACH,CAAC;AAIF;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG/C;AAWD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,CAIN;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAmB1G;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB5D;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,iBAAiB,EAAE,CA0BrB"}
1
+ {"version":3,"file":"session-store.d.ts","sourceRoot":"","sources":["../../src/utils/session-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAKlF;;;;;;GAMG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;QACtC,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAIF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C;AAWD;;GAEG;AACH,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,YAAY,GAClB,IAAI,CAIN;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,KAAK,MAAM,CAkC1G;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAqB5D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,GAChB,iBAAiB,EAAE,CAgDrB"}
@@ -37,9 +37,11 @@ function mergeUsage(a, b) {
37
37
  import { readFileSync, appendFileSync, mkdirSync, readdirSync, statSync } from "fs";
38
38
  import { join } from "path";
39
39
  import { homedir } from "os";
40
+ function sanitizeCwd(cwd) {
41
+ return cwd.replace(/[/.]/g, "-");
42
+ }
40
43
  function sessionsDir(cwd) {
41
- const sanitized = cwd.replace(/^\//, "").replace(/\//g, "-");
42
- return join(homedir(), ".claude", "projects", sanitized);
44
+ return join(homedir(), ".claude", "projects", sanitizeCwd(cwd));
43
45
  }
44
46
  function ensureDir(dir) {
45
47
  mkdirSync(dir, { recursive: true });
@@ -50,11 +52,15 @@ function logMessage(dir, sessionId, entry) {
50
52
  appendFileSync(filePath, JSON.stringify(entry) + `
51
53
  `);
52
54
  }
53
- function createSessionLogger(cwd, sessionId) {
55
+ function createSessionLogger(cwd, sessionId, model) {
54
56
  const dir = sessionsDir(cwd);
55
57
  let lastUuid = null;
56
58
  return (role, content, parentUuid) => {
57
59
  const entryUuid = uuid();
60
+ let normalizedContent = content;
61
+ if (role === "user" && typeof content === "string") {
62
+ normalizedContent = [{ type: "text", text: content }];
63
+ }
58
64
  const entry = {
59
65
  type: role,
60
66
  uuid: entryUuid,
@@ -62,7 +68,14 @@ function createSessionLogger(cwd, sessionId) {
62
68
  sessionId,
63
69
  timestamp: new Date().toISOString(),
64
70
  cwd,
65
- message: { role, content }
71
+ isSidechain: false,
72
+ userType: "external",
73
+ message: {
74
+ role,
75
+ content: normalizedContent,
76
+ ...role === "assistant" && model ? { model } : {}
77
+ },
78
+ ...role === "user" ? { permissionMode: "default" } : {}
66
79
  };
67
80
  logMessage(dir, sessionId, entry);
68
81
  lastUuid = entryUuid;
@@ -101,16 +114,30 @@ function loadSessionMessages(cwd, sessionId) {
101
114
  for (const line of lines) {
102
115
  try {
103
116
  const entry = JSON.parse(line);
104
- messages.push({
105
- role: entry.type === "user" ? "user" : "assistant",
106
- content: entry.message.content
107
- });
117
+ if (entry.type !== "user" && entry.type !== "assistant")
118
+ continue;
119
+ if (entry.isMeta === true)
120
+ continue;
121
+ const message = entry.message;
122
+ if (!message)
123
+ continue;
124
+ const role = entry.type === "user" ? "user" : "assistant";
125
+ let content;
126
+ if (typeof message.content === "string") {
127
+ content = message.content;
128
+ } else if (Array.isArray(message.content)) {
129
+ content = message.content.filter((c) => c.type === "text" || c.type === "tool_use" || c.type === "tool_result").map((c) => c);
130
+ } else {
131
+ continue;
132
+ }
133
+ messages.push({ role, content });
108
134
  } catch {}
109
135
  }
110
136
  return messages;
111
137
  }
112
138
  export {
113
139
  sessionsDir,
140
+ sanitizeCwd,
114
141
  logMessage,
115
142
  loadSessionMessages,
116
143
  findLatestSession,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fourmis-agents-sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Multi-provider AI agent SDK with direct API access and in-process tool execution",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",