opentasks 0.0.3 → 0.0.4
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/README.md +58 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +81 -1
- package/dist/cli.js.map +1 -1
- package/dist/client/client.d.ts +20 -0
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +46 -5
- package/dist/client/client.js.map +1 -1
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +11 -0
- package/dist/config/env.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.d.ts +76 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +60 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/core/init.d.ts +17 -0
- package/dist/core/init.d.ts.map +1 -0
- package/dist/core/init.js +54 -0
- package/dist/core/init.js.map +1 -0
- package/dist/daemon/entire-linker.d.ts +3 -0
- package/dist/daemon/entire-linker.d.ts.map +1 -1
- package/dist/daemon/entire-linker.js +29 -2
- package/dist/daemon/entire-linker.js.map +1 -1
- package/dist/daemon/factory.d.ts +3 -0
- package/dist/daemon/factory.d.ts.map +1 -1
- package/dist/daemon/factory.js +2 -1
- package/dist/daemon/factory.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +34 -4
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/location-state.d.ts +2 -1
- package/dist/daemon/location-state.d.ts.map +1 -1
- package/dist/daemon/location-state.js +19 -4
- package/dist/daemon/location-state.js.map +1 -1
- package/dist/daemon/methods/tools.d.ts +11 -1
- package/dist/daemon/methods/tools.d.ts.map +1 -1
- package/dist/daemon/methods/tools.js +40 -6
- package/dist/daemon/methods/tools.js.map +1 -1
- package/dist/entire/agent/agents/claude-code.d.ts +76 -0
- package/dist/entire/agent/agents/claude-code.d.ts.map +1 -0
- package/dist/entire/agent/agents/claude-code.js +759 -0
- package/dist/entire/agent/agents/claude-code.js.map +1 -0
- package/dist/entire/agent/agents/cursor.d.ts +35 -0
- package/dist/entire/agent/agents/cursor.d.ts.map +1 -0
- package/dist/entire/agent/agents/cursor.js +294 -0
- package/dist/entire/agent/agents/cursor.js.map +1 -0
- package/dist/entire/agent/agents/gemini-cli.d.ts +62 -0
- package/dist/entire/agent/agents/gemini-cli.d.ts.map +1 -0
- package/dist/entire/agent/agents/gemini-cli.js +462 -0
- package/dist/entire/agent/agents/gemini-cli.js.map +1 -0
- package/dist/entire/agent/agents/opencode.d.ts +100 -0
- package/dist/entire/agent/agents/opencode.d.ts.map +1 -0
- package/dist/entire/agent/agents/opencode.js +423 -0
- package/dist/entire/agent/agents/opencode.js.map +1 -0
- package/dist/entire/agent/registry.d.ts +54 -0
- package/dist/entire/agent/registry.d.ts.map +1 -0
- package/dist/entire/agent/registry.js +123 -0
- package/dist/entire/agent/registry.js.map +1 -0
- package/dist/entire/agent/session-types.d.ts +45 -0
- package/dist/entire/agent/session-types.d.ts.map +1 -0
- package/dist/entire/agent/session-types.js +50 -0
- package/dist/entire/agent/session-types.js.map +1 -0
- package/dist/entire/agent/types.d.ts +126 -0
- package/dist/entire/agent/types.d.ts.map +1 -0
- package/dist/entire/agent/types.js +39 -0
- package/dist/entire/agent/types.js.map +1 -0
- package/dist/entire/commands/clean.d.ts +30 -0
- package/dist/entire/commands/clean.d.ts.map +1 -0
- package/dist/entire/commands/clean.js +99 -0
- package/dist/entire/commands/clean.js.map +1 -0
- package/dist/entire/commands/disable.d.ts +23 -0
- package/dist/entire/commands/disable.d.ts.map +1 -0
- package/dist/entire/commands/disable.js +57 -0
- package/dist/entire/commands/disable.js.map +1 -0
- package/dist/entire/commands/doctor.d.ts +43 -0
- package/dist/entire/commands/doctor.d.ts.map +1 -0
- package/dist/entire/commands/doctor.js +97 -0
- package/dist/entire/commands/doctor.js.map +1 -0
- package/dist/entire/commands/enable.d.ts +29 -0
- package/dist/entire/commands/enable.d.ts.map +1 -0
- package/dist/entire/commands/enable.js +102 -0
- package/dist/entire/commands/enable.js.map +1 -0
- package/dist/entire/commands/explain.d.ts +68 -0
- package/dist/entire/commands/explain.d.ts.map +1 -0
- package/dist/entire/commands/explain.js +182 -0
- package/dist/entire/commands/explain.js.map +1 -0
- package/dist/entire/commands/reset.d.ts +23 -0
- package/dist/entire/commands/reset.d.ts.map +1 -0
- package/dist/entire/commands/reset.js +68 -0
- package/dist/entire/commands/reset.js.map +1 -0
- package/dist/entire/commands/resume.d.ts +42 -0
- package/dist/entire/commands/resume.d.ts.map +1 -0
- package/dist/entire/commands/resume.js +134 -0
- package/dist/entire/commands/resume.js.map +1 -0
- package/dist/entire/commands/rewind.d.ts +34 -0
- package/dist/entire/commands/rewind.d.ts.map +1 -0
- package/dist/entire/commands/rewind.js +155 -0
- package/dist/entire/commands/rewind.js.map +1 -0
- package/dist/entire/commands/status.d.ts +51 -0
- package/dist/entire/commands/status.d.ts.map +1 -0
- package/dist/entire/commands/status.js +94 -0
- package/dist/entire/commands/status.js.map +1 -0
- package/dist/entire/config.d.ts +40 -0
- package/dist/entire/config.d.ts.map +1 -0
- package/dist/entire/config.js +126 -0
- package/dist/entire/config.js.map +1 -0
- package/dist/entire/git-operations.d.ts +170 -0
- package/dist/entire/git-operations.d.ts.map +1 -0
- package/dist/entire/git-operations.js +395 -0
- package/dist/entire/git-operations.js.map +1 -0
- package/dist/entire/hooks/git-hooks.d.ts +22 -0
- package/dist/entire/hooks/git-hooks.d.ts.map +1 -0
- package/dist/entire/hooks/git-hooks.js +145 -0
- package/dist/entire/hooks/git-hooks.js.map +1 -0
- package/dist/entire/hooks/lifecycle.d.ts +21 -0
- package/dist/entire/hooks/lifecycle.d.ts.map +1 -0
- package/dist/entire/hooks/lifecycle.js +179 -0
- package/dist/entire/hooks/lifecycle.js.map +1 -0
- package/dist/entire/index.d.ts +68 -0
- package/dist/entire/index.d.ts.map +1 -0
- package/dist/entire/index.js +152 -0
- package/dist/entire/index.js.map +1 -0
- package/dist/entire/security/redaction.d.ts +35 -0
- package/dist/entire/security/redaction.d.ts.map +1 -0
- package/dist/entire/security/redaction.js +221 -0
- package/dist/entire/security/redaction.js.map +1 -0
- package/dist/entire/session/state-machine.d.ts +90 -0
- package/dist/entire/session/state-machine.d.ts.map +1 -0
- package/dist/entire/session/state-machine.js +347 -0
- package/dist/entire/session/state-machine.js.map +1 -0
- package/dist/entire/store/checkpoint-store.d.ts +47 -0
- package/dist/entire/store/checkpoint-store.d.ts.map +1 -0
- package/dist/entire/store/checkpoint-store.js +307 -0
- package/dist/entire/store/checkpoint-store.js.map +1 -0
- package/dist/entire/store/native-store.d.ts +14 -0
- package/dist/entire/store/native-store.d.ts.map +1 -0
- package/dist/entire/store/native-store.js +159 -0
- package/dist/entire/store/native-store.js.map +1 -0
- package/dist/entire/store/session-store.d.ts +28 -0
- package/dist/entire/store/session-store.d.ts.map +1 -0
- package/dist/entire/store/session-store.js +187 -0
- package/dist/entire/store/session-store.js.map +1 -0
- package/dist/entire/strategy/attribution.d.ts +39 -0
- package/dist/entire/strategy/attribution.d.ts.map +1 -0
- package/dist/entire/strategy/attribution.js +227 -0
- package/dist/entire/strategy/attribution.js.map +1 -0
- package/dist/entire/strategy/common.d.ts +57 -0
- package/dist/entire/strategy/common.d.ts.map +1 -0
- package/dist/entire/strategy/common.js +156 -0
- package/dist/entire/strategy/common.js.map +1 -0
- package/dist/entire/strategy/content-overlap.d.ts +33 -0
- package/dist/entire/strategy/content-overlap.d.ts.map +1 -0
- package/dist/entire/strategy/content-overlap.js +168 -0
- package/dist/entire/strategy/content-overlap.js.map +1 -0
- package/dist/entire/strategy/manual-commit.d.ts +31 -0
- package/dist/entire/strategy/manual-commit.d.ts.map +1 -0
- package/dist/entire/strategy/manual-commit.js +730 -0
- package/dist/entire/strategy/manual-commit.js.map +1 -0
- package/dist/entire/strategy/types.d.ts +163 -0
- package/dist/entire/strategy/types.d.ts.map +1 -0
- package/dist/entire/strategy/types.js +49 -0
- package/dist/entire/strategy/types.js.map +1 -0
- package/dist/entire/summarize/claude-generator.d.ts +25 -0
- package/dist/entire/summarize/claude-generator.d.ts.map +1 -0
- package/dist/entire/summarize/claude-generator.js +87 -0
- package/dist/entire/summarize/claude-generator.js.map +1 -0
- package/dist/entire/summarize/summarize.d.ts +52 -0
- package/dist/entire/summarize/summarize.d.ts.map +1 -0
- package/dist/entire/summarize/summarize.js +335 -0
- package/dist/entire/summarize/summarize.js.map +1 -0
- package/dist/entire/types.d.ts +288 -0
- package/dist/entire/types.d.ts.map +1 -0
- package/dist/entire/types.js +94 -0
- package/dist/entire/types.js.map +1 -0
- package/dist/entire/utils/chunk-files.d.ts +25 -0
- package/dist/entire/utils/chunk-files.d.ts.map +1 -0
- package/dist/entire/utils/chunk-files.js +47 -0
- package/dist/entire/utils/chunk-files.js.map +1 -0
- package/dist/entire/utils/commit-message.d.ts +11 -0
- package/dist/entire/utils/commit-message.d.ts.map +1 -0
- package/dist/entire/utils/commit-message.js +54 -0
- package/dist/entire/utils/commit-message.js.map +1 -0
- package/dist/entire/utils/detect-agent.d.ts +19 -0
- package/dist/entire/utils/detect-agent.d.ts.map +1 -0
- package/dist/entire/utils/detect-agent.js +34 -0
- package/dist/entire/utils/detect-agent.js.map +1 -0
- package/dist/entire/utils/hook-managers.d.ts +24 -0
- package/dist/entire/utils/hook-managers.d.ts.map +1 -0
- package/dist/entire/utils/hook-managers.js +87 -0
- package/dist/entire/utils/hook-managers.js.map +1 -0
- package/dist/entire/utils/ide-tags.d.ts +12 -0
- package/dist/entire/utils/ide-tags.d.ts.map +1 -0
- package/dist/entire/utils/ide-tags.js +30 -0
- package/dist/entire/utils/ide-tags.js.map +1 -0
- package/dist/entire/utils/paths.d.ts +32 -0
- package/dist/entire/utils/paths.d.ts.map +1 -0
- package/dist/entire/utils/paths.js +55 -0
- package/dist/entire/utils/paths.js.map +1 -0
- package/dist/entire/utils/preview-rewind.d.ts +23 -0
- package/dist/entire/utils/preview-rewind.d.ts.map +1 -0
- package/dist/entire/utils/preview-rewind.js +63 -0
- package/dist/entire/utils/preview-rewind.js.map +1 -0
- package/dist/entire/utils/rewind-conflict.d.ts +52 -0
- package/dist/entire/utils/rewind-conflict.d.ts.map +1 -0
- package/dist/entire/utils/rewind-conflict.js +79 -0
- package/dist/entire/utils/rewind-conflict.js.map +1 -0
- package/dist/entire/utils/shadow-branch.d.ts +44 -0
- package/dist/entire/utils/shadow-branch.d.ts.map +1 -0
- package/dist/entire/utils/shadow-branch.js +93 -0
- package/dist/entire/utils/shadow-branch.js.map +1 -0
- package/dist/entire/utils/string-utils.d.ts +24 -0
- package/dist/entire/utils/string-utils.d.ts.map +1 -0
- package/dist/entire/utils/string-utils.js +47 -0
- package/dist/entire/utils/string-utils.js.map +1 -0
- package/dist/entire/utils/todo-extract.d.ts +52 -0
- package/dist/entire/utils/todo-extract.d.ts.map +1 -0
- package/dist/entire/utils/todo-extract.js +167 -0
- package/dist/entire/utils/todo-extract.js.map +1 -0
- package/dist/entire/utils/trailers.d.ts +36 -0
- package/dist/entire/utils/trailers.d.ts.map +1 -0
- package/dist/entire/utils/trailers.js +149 -0
- package/dist/entire/utils/trailers.js.map +1 -0
- package/dist/entire/utils/transcript-parse.d.ts +57 -0
- package/dist/entire/utils/transcript-parse.d.ts.map +1 -0
- package/dist/entire/utils/transcript-parse.js +126 -0
- package/dist/entire/utils/transcript-parse.js.map +1 -0
- package/dist/entire/utils/transcript-timestamp.d.ts +22 -0
- package/dist/entire/utils/transcript-timestamp.d.ts.map +1 -0
- package/dist/entire/utils/transcript-timestamp.js +56 -0
- package/dist/entire/utils/transcript-timestamp.js.map +1 -0
- package/dist/entire/utils/tree-ops.d.ts +47 -0
- package/dist/entire/utils/tree-ops.d.ts.map +1 -0
- package/dist/entire/utils/tree-ops.js +145 -0
- package/dist/entire/utils/tree-ops.js.map +1 -0
- package/dist/entire/utils/tty.d.ts +25 -0
- package/dist/entire/utils/tty.d.ts.map +1 -0
- package/dist/entire/utils/tty.js +70 -0
- package/dist/entire/utils/tty.js.map +1 -0
- package/dist/entire/utils/validation.d.ts +31 -0
- package/dist/entire/utils/validation.d.ts.map +1 -0
- package/dist/entire/utils/validation.js +59 -0
- package/dist/entire/utils/validation.js.map +1 -0
- package/dist/entire/utils/worktree.d.ts +16 -0
- package/dist/entire/utils/worktree.d.ts.map +1 -0
- package/dist/entire/utils/worktree.js +50 -0
- package/dist/entire/utils/worktree.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/providers/entire.d.ts +27 -2
- package/dist/providers/entire.d.ts.map +1 -1
- package/dist/providers/entire.js +13 -2
- package/dist/providers/entire.js.map +1 -1
- package/dist/providers/from-config.d.ts.map +1 -1
- package/dist/providers/from-config.js +23 -0
- package/dist/providers/from-config.js.map +1 -1
- package/dist/providers/global.d.ts +27 -0
- package/dist/providers/global.d.ts.map +1 -0
- package/dist/providers/global.js +242 -0
- package/dist/providers/global.js.map +1 -0
- package/dist/providers/index.d.ts +2 -1
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +3 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/schema/edges.d.ts +5 -1
- package/dist/schema/edges.d.ts.map +1 -1
- package/dist/schema/index.d.ts +1 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/tracking/claude-task-reconstructor.d.ts +41 -0
- package/dist/tracking/claude-task-reconstructor.d.ts.map +1 -0
- package/dist/tracking/claude-task-reconstructor.js +91 -0
- package/dist/tracking/claude-task-reconstructor.js.map +1 -0
- package/dist/tracking/claude-tool-categorizer.d.ts +30 -0
- package/dist/tracking/claude-tool-categorizer.d.ts.map +1 -0
- package/dist/tracking/claude-tool-categorizer.js +98 -0
- package/dist/tracking/claude-tool-categorizer.js.map +1 -0
- package/dist/tracking/index.d.ts +19 -0
- package/dist/tracking/index.d.ts.map +1 -0
- package/dist/tracking/index.js +14 -0
- package/dist/tracking/index.js.map +1 -0
- package/dist/tracking/plan-mode-tracker.d.ts +20 -0
- package/dist/tracking/plan-mode-tracker.d.ts.map +1 -0
- package/dist/tracking/plan-mode-tracker.js +35 -0
- package/dist/tracking/plan-mode-tracker.js.map +1 -0
- package/dist/tracking/skill-tracker.d.ts +133 -0
- package/dist/tracking/skill-tracker.d.ts.map +1 -0
- package/dist/tracking/skill-tracker.js +130 -0
- package/dist/tracking/skill-tracker.js.map +1 -0
- package/dist/tracking/transcript-extractor.d.ts +45 -0
- package/dist/tracking/transcript-extractor.d.ts.map +1 -0
- package/dist/tracking/transcript-extractor.js +174 -0
- package/dist/tracking/transcript-extractor.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Redaction
|
|
3
|
+
*
|
|
4
|
+
* Multi-layered secret detection and redaction for transcripts.
|
|
5
|
+
* Uses both entropy-based detection and pattern matching
|
|
6
|
+
* for known secret formats.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Calculate Shannon entropy of a string
|
|
10
|
+
*/
|
|
11
|
+
export declare function shannonEntropy(s: string): number;
|
|
12
|
+
interface RedactionRegion {
|
|
13
|
+
start: number;
|
|
14
|
+
end: number;
|
|
15
|
+
source: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Detect secret regions in a string
|
|
19
|
+
*/
|
|
20
|
+
export declare function detectSecrets(text: string): RedactionRegion[];
|
|
21
|
+
/**
|
|
22
|
+
* Redact secrets from a plain string
|
|
23
|
+
*/
|
|
24
|
+
export declare function redactString(text: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Redact secrets from a Buffer
|
|
27
|
+
*/
|
|
28
|
+
export declare function redactBuffer(buf: Buffer): Buffer;
|
|
29
|
+
/**
|
|
30
|
+
* Redact secrets from JSONL content (line by line)
|
|
31
|
+
* Preserves JSON structure and skips safe fields
|
|
32
|
+
*/
|
|
33
|
+
export declare function redactJSONL(content: string): string;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=redaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../../../src/entire/security/redaction.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAmFH;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAehD;AAMD,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;CAChB;AA2BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CA8B7D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAejD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAqBnD"}
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secret Redaction
|
|
3
|
+
*
|
|
4
|
+
* Multi-layered secret detection and redaction for transcripts.
|
|
5
|
+
* Uses both entropy-based detection and pattern matching
|
|
6
|
+
* for known secret formats.
|
|
7
|
+
*/
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Constants
|
|
10
|
+
// ============================================================================
|
|
11
|
+
const ENTROPY_THRESHOLD = 4.5;
|
|
12
|
+
const MIN_SECRET_LENGTH = 10;
|
|
13
|
+
const REDACTED_PLACEHOLDER = 'REDACTED';
|
|
14
|
+
/** High-entropy alphanumeric pattern (potential secrets) */
|
|
15
|
+
const HIGH_ENTROPY_PATTERN = /[A-Za-z0-9+_=-]{10,}/g;
|
|
16
|
+
// ============================================================================
|
|
17
|
+
// Known Secret Patterns (subset of gitleaks rules)
|
|
18
|
+
// ============================================================================
|
|
19
|
+
const SECRET_PATTERNS = [
|
|
20
|
+
// API Keys
|
|
21
|
+
{ name: 'aws-access-key', pattern: /(?:A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}/g },
|
|
22
|
+
{ name: 'aws-secret-key', pattern: /(?:aws_secret_access_key|aws_secret_key|secret_key)\s*[=:]\s*["']?([A-Za-z0-9/+=]{40})["']?/gi },
|
|
23
|
+
{ name: 'github-token', pattern: /gh[pousr]_[A-Za-z0-9_]{36,255}/g },
|
|
24
|
+
{ name: 'github-fine-grained', pattern: /github_pat_[A-Za-z0-9_]{22,255}/g },
|
|
25
|
+
{ name: 'gitlab-token', pattern: /glpat-[A-Za-z0-9\-=_]{20,}/g },
|
|
26
|
+
{ name: 'google-api-key', pattern: /AIza[A-Za-z0-9_\-]{35}/g },
|
|
27
|
+
{ name: 'slack-token', pattern: /xox[baprs]-[0-9]{10,13}-[0-9]{10,13}-[a-zA-Z0-9]{24,34}/g },
|
|
28
|
+
{ name: 'slack-webhook', pattern: /https:\/\/hooks\.slack\.com\/services\/T[A-Z0-9]{10}\/B[A-Z0-9]{10}\/[a-zA-Z0-9]{24}/g },
|
|
29
|
+
{ name: 'stripe-key', pattern: /(?:sk|pk|rk)_(?:live|test)_[A-Za-z0-9]{10,99}/g },
|
|
30
|
+
{ name: 'twilio-api-key', pattern: /SK[0-9a-fA-F]{32}/g },
|
|
31
|
+
{ name: 'sendgrid-api-key', pattern: /SG\.[A-Za-z0-9_-]{22}\.[A-Za-z0-9_-]{43}/g },
|
|
32
|
+
{ name: 'npm-token', pattern: /npm_[A-Za-z0-9]{36}/g },
|
|
33
|
+
{ name: 'pypi-token', pattern: /pypi-[A-Za-z0-9_-]{100,}/g },
|
|
34
|
+
// Cloud Providers
|
|
35
|
+
{ name: 'azure-connection-string', pattern: /DefaultEndpointsProtocol=https;AccountName=[^;]+;AccountKey=[A-Za-z0-9+/=]{88};/g },
|
|
36
|
+
{ name: 'gcp-service-account', pattern: /"private_key":\s*"-----BEGIN (?:RSA )?PRIVATE KEY-----/g },
|
|
37
|
+
// Generic Secrets
|
|
38
|
+
{ name: 'private-key', pattern: /-----BEGIN (?:RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/g },
|
|
39
|
+
{ name: 'jwt', pattern: /eyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g },
|
|
40
|
+
{ name: 'basic-auth', pattern: /(?:basic|bearer)\s+[A-Za-z0-9+/=]{20,}/gi },
|
|
41
|
+
{ name: 'password-in-url', pattern: /[a-zA-Z]{3,10}:\/\/[^/\s:@]{3,20}:[^/\s@]{3,20}@/g },
|
|
42
|
+
// Anthropic
|
|
43
|
+
{ name: 'anthropic-api-key', pattern: /sk-ant-[A-Za-z0-9_-]{90,}/g },
|
|
44
|
+
// OpenAI
|
|
45
|
+
{ name: 'openai-api-key', pattern: /sk-[A-Za-z0-9]{20}T3BlbkFJ[A-Za-z0-9]{20}/g },
|
|
46
|
+
// Database
|
|
47
|
+
{ name: 'postgres-url', pattern: /postgres(?:ql)?:\/\/[^/\s:@]+:[^/\s@]+@[^/\s]+\/[^/\s]+/g },
|
|
48
|
+
{ name: 'mysql-url', pattern: /mysql:\/\/[^/\s:@]+:[^/\s@]+@[^/\s]+\/[^/\s]+/g },
|
|
49
|
+
{ name: 'mongodb-url', pattern: /mongodb(?:\+srv)?:\/\/[^/\s:@]+:[^/\s@]+@[^/\s]+/g },
|
|
50
|
+
// Hex-encoded secrets (generic)
|
|
51
|
+
{ name: 'hex-secret', pattern: /(?:secret|token|key|password|api_key|apikey)\s*[=:]\s*["']?([0-9a-fA-F]{32,})["']?/gi },
|
|
52
|
+
];
|
|
53
|
+
// Fields that should be skipped during redaction
|
|
54
|
+
const SAFE_FIELDS = new Set([
|
|
55
|
+
'signature',
|
|
56
|
+
'id',
|
|
57
|
+
'uuid',
|
|
58
|
+
'sessionId',
|
|
59
|
+
'session_id',
|
|
60
|
+
'checkpointId',
|
|
61
|
+
'checkpoint_id',
|
|
62
|
+
'nodeId',
|
|
63
|
+
'node_id',
|
|
64
|
+
'toolUseId',
|
|
65
|
+
'tool_use_id',
|
|
66
|
+
'file_path',
|
|
67
|
+
'filePath',
|
|
68
|
+
'path',
|
|
69
|
+
'name',
|
|
70
|
+
'type',
|
|
71
|
+
'role',
|
|
72
|
+
]);
|
|
73
|
+
// ============================================================================
|
|
74
|
+
// Entropy Calculation
|
|
75
|
+
// ============================================================================
|
|
76
|
+
/**
|
|
77
|
+
* Calculate Shannon entropy of a string
|
|
78
|
+
*/
|
|
79
|
+
export function shannonEntropy(s) {
|
|
80
|
+
if (s.length === 0)
|
|
81
|
+
return 0;
|
|
82
|
+
const freq = new Map();
|
|
83
|
+
for (const ch of s) {
|
|
84
|
+
freq.set(ch, (freq.get(ch) ?? 0) + 1);
|
|
85
|
+
}
|
|
86
|
+
let entropy = 0;
|
|
87
|
+
for (const count of freq.values()) {
|
|
88
|
+
const p = count / s.length;
|
|
89
|
+
if (p > 0)
|
|
90
|
+
entropy -= p * Math.log2(p);
|
|
91
|
+
}
|
|
92
|
+
return entropy;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Merge overlapping regions
|
|
96
|
+
*/
|
|
97
|
+
function mergeRegions(regions) {
|
|
98
|
+
if (regions.length === 0)
|
|
99
|
+
return [];
|
|
100
|
+
const sorted = [...regions].sort((a, b) => a.start - b.start);
|
|
101
|
+
const merged = [sorted[0]];
|
|
102
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
103
|
+
const last = merged[merged.length - 1];
|
|
104
|
+
if (sorted[i].start <= last.end) {
|
|
105
|
+
last.end = Math.max(last.end, sorted[i].end);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
merged.push(sorted[i]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return merged;
|
|
112
|
+
}
|
|
113
|
+
// ============================================================================
|
|
114
|
+
// Public API
|
|
115
|
+
// ============================================================================
|
|
116
|
+
/**
|
|
117
|
+
* Detect secret regions in a string
|
|
118
|
+
*/
|
|
119
|
+
export function detectSecrets(text) {
|
|
120
|
+
const regions = [];
|
|
121
|
+
// Entropy-based detection
|
|
122
|
+
for (const match of text.matchAll(HIGH_ENTROPY_PATTERN)) {
|
|
123
|
+
const value = match[0];
|
|
124
|
+
if (value.length < MIN_SECRET_LENGTH)
|
|
125
|
+
continue;
|
|
126
|
+
if (shannonEntropy(value) >= ENTROPY_THRESHOLD) {
|
|
127
|
+
regions.push({
|
|
128
|
+
start: match.index,
|
|
129
|
+
end: match.index + value.length,
|
|
130
|
+
source: 'entropy',
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// Pattern-based detection
|
|
135
|
+
for (const { name, pattern } of SECRET_PATTERNS) {
|
|
136
|
+
// Reset regex state
|
|
137
|
+
pattern.lastIndex = 0;
|
|
138
|
+
for (const match of text.matchAll(pattern)) {
|
|
139
|
+
regions.push({
|
|
140
|
+
start: match.index,
|
|
141
|
+
end: match.index + match[0].length,
|
|
142
|
+
source: name,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return mergeRegions(regions);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Redact secrets from a plain string
|
|
150
|
+
*/
|
|
151
|
+
export function redactString(text) {
|
|
152
|
+
const regions = detectSecrets(text);
|
|
153
|
+
if (regions.length === 0)
|
|
154
|
+
return text;
|
|
155
|
+
let result = '';
|
|
156
|
+
let pos = 0;
|
|
157
|
+
for (const region of regions) {
|
|
158
|
+
result += text.slice(pos, region.start);
|
|
159
|
+
result += REDACTED_PLACEHOLDER;
|
|
160
|
+
pos = region.end;
|
|
161
|
+
}
|
|
162
|
+
result += text.slice(pos);
|
|
163
|
+
return result;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Redact secrets from a Buffer
|
|
167
|
+
*/
|
|
168
|
+
export function redactBuffer(buf) {
|
|
169
|
+
return Buffer.from(redactString(buf.toString('utf-8')));
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Redact secrets from JSONL content (line by line)
|
|
173
|
+
* Preserves JSON structure and skips safe fields
|
|
174
|
+
*/
|
|
175
|
+
export function redactJSONL(content) {
|
|
176
|
+
const lines = content.split('\n');
|
|
177
|
+
const result = [];
|
|
178
|
+
for (const line of lines) {
|
|
179
|
+
if (!line.trim()) {
|
|
180
|
+
result.push(line);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
try {
|
|
184
|
+
const parsed = JSON.parse(line);
|
|
185
|
+
const redacted = redactJSONValue(parsed);
|
|
186
|
+
result.push(JSON.stringify(redacted));
|
|
187
|
+
}
|
|
188
|
+
catch {
|
|
189
|
+
// Not valid JSON, redact as plain text
|
|
190
|
+
result.push(redactString(line));
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return result.join('\n');
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Recursively redact values in a JSON object
|
|
197
|
+
*/
|
|
198
|
+
function redactJSONValue(value, key) {
|
|
199
|
+
// Skip safe fields
|
|
200
|
+
if (key && SAFE_FIELDS.has(key))
|
|
201
|
+
return value;
|
|
202
|
+
if (typeof value === 'string') {
|
|
203
|
+
return redactString(value);
|
|
204
|
+
}
|
|
205
|
+
if (Array.isArray(value)) {
|
|
206
|
+
return value.map((item) => redactJSONValue(item));
|
|
207
|
+
}
|
|
208
|
+
if (value && typeof value === 'object') {
|
|
209
|
+
const obj = value;
|
|
210
|
+
// Skip image/base64 objects
|
|
211
|
+
if (obj.type === 'image' || obj.type === 'base64')
|
|
212
|
+
return value;
|
|
213
|
+
const result = {};
|
|
214
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
215
|
+
result[k] = redactJSONValue(v, k);
|
|
216
|
+
}
|
|
217
|
+
return result;
|
|
218
|
+
}
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
//# sourceMappingURL=redaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../../../src/entire/security/redaction.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Session State Machine
|
|
3
|
+
*
|
|
4
|
+
* Pure-function state machine for session lifecycle transitions.
|
|
5
|
+
* Ported from Go: session/phase.go
|
|
6
|
+
*
|
|
7
|
+
* The state machine computes the next phase and required actions given the
|
|
8
|
+
* current phase and an event. ApplyTransition executes side effects.
|
|
9
|
+
*/
|
|
10
|
+
export type Phase = 'active' | 'idle' | 'ended';
|
|
11
|
+
/**
|
|
12
|
+
* Normalize a phase string, treating empty or unknown values as 'idle'
|
|
13
|
+
* for backward compatibility with pre-state-machine session files.
|
|
14
|
+
*/
|
|
15
|
+
export declare function phaseFromString(s: string | undefined): Phase;
|
|
16
|
+
export declare const enum StateMachineEvent {
|
|
17
|
+
TurnStart = 0,
|
|
18
|
+
TurnEnd = 1,
|
|
19
|
+
GitCommit = 2,
|
|
20
|
+
SessionStart = 3,
|
|
21
|
+
SessionStop = 4,
|
|
22
|
+
Compaction = 5
|
|
23
|
+
}
|
|
24
|
+
export declare function eventToString(e: StateMachineEvent): string;
|
|
25
|
+
export declare const enum Action {
|
|
26
|
+
Condense = 0,
|
|
27
|
+
CondenseIfFilesTouched = 1,
|
|
28
|
+
DiscardIfNoFiles = 2,
|
|
29
|
+
WarnStaleSession = 3,
|
|
30
|
+
ClearEndedAt = 4,
|
|
31
|
+
UpdateLastInteraction = 5
|
|
32
|
+
}
|
|
33
|
+
export declare function actionToString(a: Action): string;
|
|
34
|
+
export interface TransitionContext {
|
|
35
|
+
hasFilesTouched: boolean;
|
|
36
|
+
isRebaseInProgress: boolean;
|
|
37
|
+
}
|
|
38
|
+
export interface TransitionResult {
|
|
39
|
+
newPhase: Phase;
|
|
40
|
+
actions: Action[];
|
|
41
|
+
}
|
|
42
|
+
export declare function transition(current: Phase, event: StateMachineEvent, ctx: TransitionContext): TransitionResult;
|
|
43
|
+
export interface ActionHandler {
|
|
44
|
+
handleCondense(state: StateMachineState): Promise<void>;
|
|
45
|
+
handleCondenseIfFilesTouched(state: StateMachineState): Promise<void>;
|
|
46
|
+
handleDiscardIfNoFiles(state: StateMachineState): Promise<void>;
|
|
47
|
+
handleWarnStaleSession(state: StateMachineState): Promise<void>;
|
|
48
|
+
}
|
|
49
|
+
export declare class NoOpActionHandler implements ActionHandler {
|
|
50
|
+
handleCondense(): Promise<void>;
|
|
51
|
+
handleCondenseIfFilesTouched(): Promise<void>;
|
|
52
|
+
handleDiscardIfNoFiles(): Promise<void>;
|
|
53
|
+
handleWarnStaleSession(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
export interface StateMachineState {
|
|
56
|
+
sessionID: string;
|
|
57
|
+
phase: Phase;
|
|
58
|
+
filesTouched: string[];
|
|
59
|
+
lastInteractionTime?: string;
|
|
60
|
+
endedAt?: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Apply a TransitionResult to state: sets the new phase, then executes
|
|
64
|
+
* all actions. Common actions (UpdateLastInteraction, ClearEndedAt)
|
|
65
|
+
* always run. Strategy-specific handler actions stop on first error.
|
|
66
|
+
*/
|
|
67
|
+
export declare function applyTransition(state: StateMachineState, result: TransitionResult, handler: ActionHandler): Promise<Error | null>;
|
|
68
|
+
/** Duration after which a session is considered stale (7 days) */
|
|
69
|
+
export declare const STALE_SESSION_THRESHOLD_MS: number;
|
|
70
|
+
/**
|
|
71
|
+
* Returns true when the session's last interaction exceeds the stale threshold.
|
|
72
|
+
*/
|
|
73
|
+
export declare function isStale(lastInteractionTime: string | undefined): boolean;
|
|
74
|
+
/**
|
|
75
|
+
* Normalize session state after loading from disk.
|
|
76
|
+
* Migrates legacy phase values and deprecated transcript fields.
|
|
77
|
+
*/
|
|
78
|
+
export declare function normalizeAfterLoad(state: {
|
|
79
|
+
phase?: string;
|
|
80
|
+
checkpointTranscriptStart?: number;
|
|
81
|
+
condensedTranscriptLines?: number;
|
|
82
|
+
transcriptLinesAtStart?: number;
|
|
83
|
+
attributionBaseCommit?: string;
|
|
84
|
+
baseCommit?: string;
|
|
85
|
+
}): void;
|
|
86
|
+
/**
|
|
87
|
+
* Generate a Mermaid state diagram from the transition table.
|
|
88
|
+
*/
|
|
89
|
+
export declare function mermaidDiagram(): string;
|
|
90
|
+
//# sourceMappingURL=state-machine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-machine.d.ts","sourceRoot":"","sources":["../../../src/entire/session/state-machine.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,MAAM,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,CAa5D;AAMD,0BAAkB,iBAAiB;IACjC,SAAS,IAAI;IACb,OAAO,IAAI;IACX,SAAS,IAAI;IACb,YAAY,IAAI;IAChB,WAAW,IAAI;IACf,UAAU,IAAI;CACf;AAWD,wBAAgB,aAAa,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAiB1D;AAMD,0BAAkB,MAAM;IACtB,QAAQ,IAAI;IACZ,sBAAsB,IAAI;IAC1B,gBAAgB,IAAI;IACpB,gBAAgB,IAAI;IACpB,YAAY,IAAI;IAChB,qBAAqB,IAAI;CAC1B;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAiBhD;AAMD,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD,wBAAgB,UAAU,CACxB,OAAO,EAAE,KAAK,EACd,KAAK,EAAE,iBAAiB,EACxB,GAAG,EAAE,iBAAiB,GACrB,gBAAgB,CAalB;AA8HD,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,4BAA4B,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtE,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,sBAAsB,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,qBAAa,iBAAkB,YAAW,aAAa;IAC/C,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAC/B,4BAA4B,IAAI,OAAO,CAAC,IAAI,CAAC;IAC7C,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IACvC,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;CAC9C;AAMD,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAqDvB;AAMD,kEAAkE;AAClE,eAAO,MAAM,0BAA0B,QAA0B,CAAC;AAElE;;GAEG;AACH,wBAAgB,OAAO,CAAC,mBAAmB,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAGxE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,GAAG,IAAI,CAoBP;AAQD;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CA8CvC"}
|