openplanter 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 (126) hide show
  1. package/README.md +210 -0
  2. package/dist/builder.d.ts +11 -0
  3. package/dist/builder.d.ts.map +1 -0
  4. package/dist/builder.js +179 -0
  5. package/dist/builder.js.map +1 -0
  6. package/dist/cli.d.ts +9 -0
  7. package/dist/cli.d.ts.map +1 -0
  8. package/dist/cli.js +548 -0
  9. package/dist/cli.js.map +1 -0
  10. package/dist/config.d.ts +51 -0
  11. package/dist/config.d.ts.map +1 -0
  12. package/dist/config.js +114 -0
  13. package/dist/config.js.map +1 -0
  14. package/dist/credentials.d.ts +52 -0
  15. package/dist/credentials.d.ts.map +1 -0
  16. package/dist/credentials.js +371 -0
  17. package/dist/credentials.js.map +1 -0
  18. package/dist/demo.d.ts +26 -0
  19. package/dist/demo.d.ts.map +1 -0
  20. package/dist/demo.js +95 -0
  21. package/dist/demo.js.map +1 -0
  22. package/dist/engine.d.ts +91 -0
  23. package/dist/engine.d.ts.map +1 -0
  24. package/dist/engine.js +1036 -0
  25. package/dist/engine.js.map +1 -0
  26. package/dist/index.d.ts +30 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +39 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/investigation-tools/aph-holdings.d.ts +61 -0
  31. package/dist/investigation-tools/aph-holdings.d.ts.map +1 -0
  32. package/dist/investigation-tools/aph-holdings.js +459 -0
  33. package/dist/investigation-tools/aph-holdings.js.map +1 -0
  34. package/dist/investigation-tools/asic-officer-lookup.d.ts +42 -0
  35. package/dist/investigation-tools/asic-officer-lookup.d.ts.map +1 -0
  36. package/dist/investigation-tools/asic-officer-lookup.js +197 -0
  37. package/dist/investigation-tools/asic-officer-lookup.js.map +1 -0
  38. package/dist/investigation-tools/asx-calendar-fetcher.d.ts +42 -0
  39. package/dist/investigation-tools/asx-calendar-fetcher.d.ts.map +1 -0
  40. package/dist/investigation-tools/asx-calendar-fetcher.js +271 -0
  41. package/dist/investigation-tools/asx-calendar-fetcher.js.map +1 -0
  42. package/dist/investigation-tools/asx-parser.d.ts +66 -0
  43. package/dist/investigation-tools/asx-parser.d.ts.map +1 -0
  44. package/dist/investigation-tools/asx-parser.js +314 -0
  45. package/dist/investigation-tools/asx-parser.js.map +1 -0
  46. package/dist/investigation-tools/bulk-asx-announcements.d.ts +53 -0
  47. package/dist/investigation-tools/bulk-asx-announcements.d.ts.map +1 -0
  48. package/dist/investigation-tools/bulk-asx-announcements.js +204 -0
  49. package/dist/investigation-tools/bulk-asx-announcements.js.map +1 -0
  50. package/dist/investigation-tools/entity-resolver.d.ts +77 -0
  51. package/dist/investigation-tools/entity-resolver.d.ts.map +1 -0
  52. package/dist/investigation-tools/entity-resolver.js +346 -0
  53. package/dist/investigation-tools/entity-resolver.js.map +1 -0
  54. package/dist/investigation-tools/hotcopper-scraper.d.ts +73 -0
  55. package/dist/investigation-tools/hotcopper-scraper.d.ts.map +1 -0
  56. package/dist/investigation-tools/hotcopper-scraper.js +318 -0
  57. package/dist/investigation-tools/hotcopper-scraper.js.map +1 -0
  58. package/dist/investigation-tools/index.d.ts +15 -0
  59. package/dist/investigation-tools/index.d.ts.map +1 -0
  60. package/dist/investigation-tools/index.js +15 -0
  61. package/dist/investigation-tools/index.js.map +1 -0
  62. package/dist/investigation-tools/insider-graph.d.ts +173 -0
  63. package/dist/investigation-tools/insider-graph.d.ts.map +1 -0
  64. package/dist/investigation-tools/insider-graph.js +732 -0
  65. package/dist/investigation-tools/insider-graph.js.map +1 -0
  66. package/dist/investigation-tools/insider-suspicion-scorer.d.ts +97 -0
  67. package/dist/investigation-tools/insider-suspicion-scorer.d.ts.map +1 -0
  68. package/dist/investigation-tools/insider-suspicion-scorer.js +327 -0
  69. package/dist/investigation-tools/insider-suspicion-scorer.js.map +1 -0
  70. package/dist/investigation-tools/multi-forum-scraper.d.ts +104 -0
  71. package/dist/investigation-tools/multi-forum-scraper.d.ts.map +1 -0
  72. package/dist/investigation-tools/multi-forum-scraper.js +415 -0
  73. package/dist/investigation-tools/multi-forum-scraper.js.map +1 -0
  74. package/dist/investigation-tools/price-fetcher.d.ts +81 -0
  75. package/dist/investigation-tools/price-fetcher.d.ts.map +1 -0
  76. package/dist/investigation-tools/price-fetcher.js +268 -0
  77. package/dist/investigation-tools/price-fetcher.js.map +1 -0
  78. package/dist/investigation-tools/shared.d.ts +39 -0
  79. package/dist/investigation-tools/shared.d.ts.map +1 -0
  80. package/dist/investigation-tools/shared.js +203 -0
  81. package/dist/investigation-tools/shared.js.map +1 -0
  82. package/dist/investigation-tools/timeline-linker.d.ts +90 -0
  83. package/dist/investigation-tools/timeline-linker.d.ts.map +1 -0
  84. package/dist/investigation-tools/timeline-linker.js +219 -0
  85. package/dist/investigation-tools/timeline-linker.js.map +1 -0
  86. package/dist/investigation-tools/volume-scanner.d.ts +70 -0
  87. package/dist/investigation-tools/volume-scanner.d.ts.map +1 -0
  88. package/dist/investigation-tools/volume-scanner.js +227 -0
  89. package/dist/investigation-tools/volume-scanner.js.map +1 -0
  90. package/dist/model.d.ts +136 -0
  91. package/dist/model.d.ts.map +1 -0
  92. package/dist/model.js +1071 -0
  93. package/dist/model.js.map +1 -0
  94. package/dist/patching.d.ts +45 -0
  95. package/dist/patching.d.ts.map +1 -0
  96. package/dist/patching.js +317 -0
  97. package/dist/patching.js.map +1 -0
  98. package/dist/prompts.d.ts +15 -0
  99. package/dist/prompts.d.ts.map +1 -0
  100. package/dist/prompts.js +351 -0
  101. package/dist/prompts.js.map +1 -0
  102. package/dist/replay-log.d.ts +54 -0
  103. package/dist/replay-log.d.ts.map +1 -0
  104. package/dist/replay-log.js +94 -0
  105. package/dist/replay-log.js.map +1 -0
  106. package/dist/runtime.d.ts +53 -0
  107. package/dist/runtime.d.ts.map +1 -0
  108. package/dist/runtime.js +259 -0
  109. package/dist/runtime.js.map +1 -0
  110. package/dist/settings.d.ts +39 -0
  111. package/dist/settings.d.ts.map +1 -0
  112. package/dist/settings.js +146 -0
  113. package/dist/settings.js.map +1 -0
  114. package/dist/tool-defs.d.ts +58 -0
  115. package/dist/tool-defs.d.ts.map +1 -0
  116. package/dist/tool-defs.js +1029 -0
  117. package/dist/tool-defs.js.map +1 -0
  118. package/dist/tools.d.ts +72 -0
  119. package/dist/tools.d.ts.map +1 -0
  120. package/dist/tools.js +1454 -0
  121. package/dist/tools.js.map +1 -0
  122. package/dist/tui.d.ts +49 -0
  123. package/dist/tui.d.ts.map +1 -0
  124. package/dist/tui.js +699 -0
  125. package/dist/tui.js.map +1 -0
  126. package/package.json +126 -0
package/dist/demo.js ADDED
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Demo mode: censor workspace path segments in TUI output.
3
+ *
4
+ * Migrated from agent/demo.py.
5
+ *
6
+ * Censoring is UI-only – the agent's internal state is unaffected.
7
+ * Block characters (U+2588) replace sensitive text at the same length
8
+ * so style spans are preserved.
9
+ *
10
+ * Entity-name censoring is handled by a prompt instruction (see
11
+ * prompts.ts) rather than regex post-processing.
12
+ */
13
+ import * as path from "node:path";
14
+ // ---------------------------------------------------------------------------
15
+ // Generic path components that should NOT be censored
16
+ // ---------------------------------------------------------------------------
17
+ export const _GENERIC_PATH_PARTS = new Set([
18
+ "/",
19
+ "Users",
20
+ "home",
21
+ "Documents",
22
+ "Desktop",
23
+ "Downloads",
24
+ "Projects",
25
+ "repos",
26
+ "src",
27
+ "var",
28
+ "tmp",
29
+ "opt",
30
+ "etc",
31
+ "Library",
32
+ "Applications",
33
+ "volumes",
34
+ "mnt",
35
+ "media",
36
+ "nix",
37
+ "store",
38
+ "run",
39
+ "snap",
40
+ ]);
41
+ // ---------------------------------------------------------------------------
42
+ // DemoCensor
43
+ // ---------------------------------------------------------------------------
44
+ export class DemoCensor {
45
+ /**
46
+ * Builds replacement tables from a workspace path and censors text.
47
+ */
48
+ _replacements;
49
+ constructor(workspace) {
50
+ this._replacements = [];
51
+ this._buildPathReplacements(workspace);
52
+ }
53
+ // -- construction helpers ------------------------------------------------
54
+ _buildPathReplacements(workspace) {
55
+ /**
56
+ * Decompose workspace into parts; add non-generic, non-project
57
+ * segments to the literal replacement table.
58
+ */
59
+ const resolved = path.resolve(workspace);
60
+ const parts = resolved.split(path.sep).filter(Boolean);
61
+ const projectName = path.basename(resolved);
62
+ for (const part of parts) {
63
+ if (_GENERIC_PATH_PARTS.has(part))
64
+ continue;
65
+ if (part === projectName)
66
+ continue;
67
+ if (!part)
68
+ continue;
69
+ const replacement = "\u2588".repeat(part.length);
70
+ this._replacements.push([part, replacement]);
71
+ }
72
+ // Sort longest-first so longer matches take precedence.
73
+ this._replacements.sort((a, b) => b[0].length - a[0].length);
74
+ }
75
+ // -- public API ----------------------------------------------------------
76
+ /**
77
+ * Apply workspace-path segment replacements.
78
+ */
79
+ censorText(text) {
80
+ let result = text;
81
+ for (const [original, replacement] of this._replacements) {
82
+ // Replace all occurrences
83
+ let idx = result.indexOf(original);
84
+ while (idx !== -1) {
85
+ result =
86
+ result.slice(0, idx) +
87
+ replacement +
88
+ result.slice(idx + original.length);
89
+ idx = result.indexOf(original, idx + replacement.length);
90
+ }
91
+ }
92
+ return result;
93
+ }
94
+ }
95
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../src/demo.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,8EAA8E;AAC9E,sDAAsD;AACtD,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC;IAC9D,GAAG;IACH,OAAO;IACP,MAAM;IACN,WAAW;IACX,SAAS;IACT,WAAW;IACX,UAAU;IACV,OAAO;IACP,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,SAAS;IACT,cAAc;IACd,SAAS;IACT,KAAK;IACL,OAAO;IACP,KAAK;IACL,OAAO;IACP,KAAK;IACL,MAAM;CACP,CAAC,CAAC;AAEH,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,OAAO,UAAU;IACrB;;OAEG;IAEK,aAAa,CAA0B;IAE/C,YAAY,SAAiB;QAC3B,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACzC,CAAC;IAED,2EAA2E;IAEnE,sBAAsB,CAAC,SAAiB;QAC9C;;;WAGG;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC5C,IAAI,IAAI,KAAK,WAAW;gBAAE,SAAS;YACnC,IAAI,CAAC,IAAI;gBAAE,SAAS;YACpB,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACjD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC;QAC/C,CAAC;QAED,wDAAwD;QACxD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,CAAC;IAED,2EAA2E;IAE3E;;OAEG;IACH,UAAU,CAAC,IAAY;QACrB,IAAI,MAAM,GAAG,IAAI,CAAC;QAClB,KAAK,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACzD,0BAA0B;YAC1B,IAAI,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,OAAO,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBAClB,MAAM;oBACJ,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;wBACpB,WAAW;wBACX,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;gBACtC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Core RLMEngine – orchestrates the recursive agent loop.
3
+ *
4
+ * Migrated from agent/engine.py to TypeScript (ESM, ES2022, Node16).
5
+ */
6
+ import type { AgentConfig } from "./config.js";
7
+ import type { BaseModel } from "./model.js";
8
+ import type { ReplayLogger } from "./replay-log.js";
9
+ import { WorkspaceTools } from "./tools.js";
10
+ export type EventCallback = (msg: string) => void;
11
+ export type StepCallback = (step: Record<string, unknown>) => void;
12
+ export type ContentDeltaCallback = (deltaType: string, text: string) => void;
13
+ export type ModelFactory = (modelName: string, reasoningEffort: string | null) => BaseModel;
14
+ /** One-line summary of tool call arguments. */
15
+ export declare function summarizeArgs(args: Record<string, unknown>, maxLen?: number): string;
16
+ /** First line or truncated preview of an observation. */
17
+ export declare function summarizeObservation(text: string, maxLen?: number): string;
18
+ /** Legacy alias for tests and external code that reference SYSTEM_PROMPT directly. */
19
+ export declare const SYSTEM_PROMPT: string;
20
+ export declare const _MODEL_CONTEXT_WINDOWS: Record<string, number>;
21
+ export declare const _DEFAULT_CONTEXT_WINDOW = 128000;
22
+ /**
23
+ * Determine capability tier for a model. Lower number = higher capability.
24
+ *
25
+ * Anthropic chain (by model name):
26
+ * opus → 1, sonnet → 2, haiku → 3
27
+ * OpenAI codex chain (by reasoning effort):
28
+ * xhigh → 1, high → 2, medium → 3, low → 4
29
+ * Unknown → 2
30
+ */
31
+ export declare function modelTier(modelName: string, reasoningEffort?: string | null): number;
32
+ /**
33
+ * Return [modelName, reasoningEffort] for the lowest-tier executor.
34
+ *
35
+ * Anthropic models → haiku. Unknown → no downgrade (return same name).
36
+ */
37
+ export declare function lowestTierModel(modelName: string): [string, string | null];
38
+ export declare class ExternalContext {
39
+ observations: string[];
40
+ add(text: string): void;
41
+ summary(maxItems?: number, maxChars?: number): string;
42
+ }
43
+ export declare class RLMEngine {
44
+ model: BaseModel;
45
+ tools: WorkspaceTools;
46
+ config: AgentConfig;
47
+ systemPrompt: string;
48
+ sessionTokens: Record<string, {
49
+ input: number;
50
+ output: number;
51
+ }>;
52
+ modelFactory: ModelFactory | null;
53
+ sessionDir: string | null;
54
+ sessionId: string | null;
55
+ private _modelCache;
56
+ private _shellCommandCounts;
57
+ constructor(opts: {
58
+ model: BaseModel;
59
+ tools: WorkspaceTools;
60
+ config: AgentConfig;
61
+ systemPrompt?: string;
62
+ sessionTokens?: Record<string, {
63
+ input: number;
64
+ output: number;
65
+ }>;
66
+ modelFactory?: ModelFactory | null;
67
+ sessionDir?: string | null;
68
+ sessionId?: string | null;
69
+ });
70
+ solve(objective: string, onEvent?: EventCallback | null): Promise<string>;
71
+ solveWithContext(opts: {
72
+ objective: string;
73
+ context?: ExternalContext | null;
74
+ onEvent?: EventCallback | null;
75
+ onStep?: StepCallback | null;
76
+ onContentDelta?: ContentDeltaCallback | null;
77
+ replayLogger?: ReplayLogger | null;
78
+ }): Promise<[string, ExternalContext]>;
79
+ private _emit;
80
+ private _clipObservation;
81
+ private _runtimePolicyCheck;
82
+ private _judgeResult;
83
+ private _solveRecursive;
84
+ private _runOneTool;
85
+ private _applyToolCall;
86
+ /** List available artifacts. */
87
+ private _listArtifacts;
88
+ /** Read an artifact's conversation log. */
89
+ private _readArtifact;
90
+ }
91
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"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"}