@galaxy-stack/ai-coder-core 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.
- package/LICENSE +21 -0
- package/README.md +131 -0
- package/dist/approval/approval-policy.d.ts +31 -0
- package/dist/approval/approval-policy.d.ts.map +1 -0
- package/dist/approval/approval-policy.js +179 -0
- package/dist/approval/approval-policy.js.map +1 -0
- package/dist/approval/index.d.ts +2 -0
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +2 -0
- package/dist/approval/index.js.map +1 -0
- package/dist/context/attachment-types.d.ts +35 -0
- package/dist/context/attachment-types.d.ts.map +1 -0
- package/dist/context/attachment-types.js +9 -0
- package/dist/context/attachment-types.js.map +1 -0
- package/dist/context/checkpoint.d.ts +194 -0
- package/dist/context/checkpoint.d.ts.map +1 -0
- package/dist/context/checkpoint.js +921 -0
- package/dist/context/checkpoint.js.map +1 -0
- package/dist/context/context-manager.d.ts +153 -0
- package/dist/context/context-manager.d.ts.map +1 -0
- package/dist/context/context-manager.js +541 -0
- package/dist/context/context-manager.js.map +1 -0
- package/dist/context/context-profile.d.ts +42 -0
- package/dist/context/context-profile.d.ts.map +1 -0
- package/dist/context/context-profile.js +102 -0
- package/dist/context/context-profile.js.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/token-ledger.d.ts +102 -0
- package/dist/context/token-ledger.d.ts.map +1 -0
- package/dist/context/token-ledger.js +205 -0
- package/dist/context/token-ledger.js.map +1 -0
- package/dist/context/tool-output.d.ts +46 -0
- package/dist/context/tool-output.d.ts.map +1 -0
- package/dist/context/tool-output.js +82 -0
- package/dist/context/tool-output.js.map +1 -0
- package/dist/deterministic-order.d.ts +3 -0
- package/dist/deterministic-order.d.ts.map +1 -0
- package/dist/deterministic-order.js +5 -0
- package/dist/deterministic-order.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/ports/approval-port.d.ts +29 -0
- package/dist/ports/approval-port.d.ts.map +1 -0
- package/dist/ports/approval-port.js +9 -0
- package/dist/ports/approval-port.js.map +1 -0
- package/dist/ports/artifact-port.d.ts +66 -0
- package/dist/ports/artifact-port.d.ts.map +1 -0
- package/dist/ports/artifact-port.js +9 -0
- package/dist/ports/artifact-port.js.map +1 -0
- package/dist/ports/capability-port.d.ts +62 -0
- package/dist/ports/capability-port.d.ts.map +1 -0
- package/dist/ports/capability-port.js +9 -0
- package/dist/ports/capability-port.js.map +1 -0
- package/dist/ports/coding-model-port.d.ts +12 -0
- package/dist/ports/coding-model-port.d.ts.map +1 -0
- package/dist/ports/coding-model-port.js +9 -0
- package/dist/ports/coding-model-port.js.map +1 -0
- package/dist/ports/command-port.d.ts +94 -0
- package/dist/ports/command-port.d.ts.map +1 -0
- package/dist/ports/command-port.js +9 -0
- package/dist/ports/command-port.js.map +1 -0
- package/dist/ports/execution-context.d.ts +30 -0
- package/dist/ports/execution-context.d.ts.map +1 -0
- package/dist/ports/execution-context.js +11 -0
- package/dist/ports/execution-context.js.map +1 -0
- package/dist/ports/git-port.d.ts +27 -0
- package/dist/ports/git-port.d.ts.map +1 -0
- package/dist/ports/git-port.js +9 -0
- package/dist/ports/git-port.js.map +1 -0
- package/dist/ports/host-adapter.d.ts +36 -0
- package/dist/ports/host-adapter.d.ts.map +1 -0
- package/dist/ports/host-adapter.js +9 -0
- package/dist/ports/host-adapter.js.map +1 -0
- package/dist/ports/index.d.ts +16 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +16 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/ports/pagination.d.ts +17 -0
- package/dist/ports/pagination.d.ts.map +1 -0
- package/dist/ports/pagination.js +9 -0
- package/dist/ports/pagination.js.map +1 -0
- package/dist/ports/persistence-port.d.ts +59 -0
- package/dist/ports/persistence-port.d.ts.map +1 -0
- package/dist/ports/persistence-port.js +9 -0
- package/dist/ports/persistence-port.js.map +1 -0
- package/dist/ports/port-result.d.ts +29 -0
- package/dist/ports/port-result.d.ts.map +1 -0
- package/dist/ports/port-result.js +20 -0
- package/dist/ports/port-result.js.map +1 -0
- package/dist/ports/preview-port.d.ts +27 -0
- package/dist/ports/preview-port.d.ts.map +1 -0
- package/dist/ports/preview-port.js +9 -0
- package/dist/ports/preview-port.js.map +1 -0
- package/dist/ports/research-port.d.ts +40 -0
- package/dist/ports/research-port.d.ts.map +1 -0
- package/dist/ports/research-port.js +9 -0
- package/dist/ports/research-port.js.map +1 -0
- package/dist/ports/trace-port.d.ts +26 -0
- package/dist/ports/trace-port.d.ts.map +1 -0
- package/dist/ports/trace-port.js +9 -0
- package/dist/ports/trace-port.js.map +1 -0
- package/dist/ports/workspace-port.d.ts +126 -0
- package/dist/ports/workspace-port.d.ts.map +1 -0
- package/dist/ports/workspace-port.js +9 -0
- package/dist/ports/workspace-port.js.map +1 -0
- package/dist/prompt/index.d.ts +2 -0
- package/dist/prompt/index.d.ts.map +1 -0
- package/dist/prompt/index.js +2 -0
- package/dist/prompt/index.js.map +1 -0
- package/dist/prompt/prompt-assembler.d.ts +114 -0
- package/dist/prompt/prompt-assembler.d.ts.map +1 -0
- package/dist/prompt/prompt-assembler.js +363 -0
- package/dist/prompt/prompt-assembler.js.map +1 -0
- package/dist/retrieval/evidence.d.ts +41 -0
- package/dist/retrieval/evidence.d.ts.map +1 -0
- package/dist/retrieval/evidence.js +48 -0
- package/dist/retrieval/evidence.js.map +1 -0
- package/dist/retrieval/index.d.ts +4 -0
- package/dist/retrieval/index.d.ts.map +1 -0
- package/dist/retrieval/index.js +4 -0
- package/dist/retrieval/index.js.map +1 -0
- package/dist/retrieval/lexical-retriever.d.ts +56 -0
- package/dist/retrieval/lexical-retriever.d.ts.map +1 -0
- package/dist/retrieval/lexical-retriever.js +128 -0
- package/dist/retrieval/lexical-retriever.js.map +1 -0
- package/dist/retrieval/retrieval-policy.d.ts +25 -0
- package/dist/retrieval/retrieval-policy.d.ts.map +1 -0
- package/dist/retrieval/retrieval-policy.js +71 -0
- package/dist/retrieval/retrieval-policy.js.map +1 -0
- package/dist/runtime/completion-gate.d.ts +75 -0
- package/dist/runtime/completion-gate.d.ts.map +1 -0
- package/dist/runtime/completion-gate.js +114 -0
- package/dist/runtime/completion-gate.js.map +1 -0
- package/dist/runtime/index.d.ts +7 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +7 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/run-controller.d.ts +55 -0
- package/dist/runtime/run-controller.d.ts.map +1 -0
- package/dist/runtime/run-controller.js +2673 -0
- package/dist/runtime/run-controller.js.map +1 -0
- package/dist/runtime/runtime-error.d.ts +7 -0
- package/dist/runtime/runtime-error.d.ts.map +1 -0
- package/dist/runtime/runtime-error.js +11 -0
- package/dist/runtime/runtime-error.js.map +1 -0
- package/dist/runtime/runtime-types.d.ts +303 -0
- package/dist/runtime/runtime-types.d.ts.map +1 -0
- package/dist/runtime/runtime-types.js +2 -0
- package/dist/runtime/runtime-types.js.map +1 -0
- package/dist/runtime/state-machine.d.ts +27 -0
- package/dist/runtime/state-machine.d.ts.map +1 -0
- package/dist/runtime/state-machine.js +68 -0
- package/dist/runtime/state-machine.js.map +1 -0
- package/dist/runtime/trace-emitter.d.ts +17 -0
- package/dist/runtime/trace-emitter.d.ts.map +1 -0
- package/dist/runtime/trace-emitter.js +91 -0
- package/dist/runtime/trace-emitter.js.map +1 -0
- package/dist/tools/coding-messages.d.ts +112 -0
- package/dist/tools/coding-messages.d.ts.map +1 -0
- package/dist/tools/coding-messages.js +20 -0
- package/dist/tools/coding-messages.js.map +1 -0
- package/dist/tools/index.d.ts +7 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +7 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/json-schema.d.ts +18 -0
- package/dist/tools/json-schema.d.ts.map +1 -0
- package/dist/tools/json-schema.js +299 -0
- package/dist/tools/json-schema.js.map +1 -0
- package/dist/tools/settings-types.d.ts +41 -0
- package/dist/tools/settings-types.d.ts.map +1 -0
- package/dist/tools/settings-types.js +88 -0
- package/dist/tools/settings-types.js.map +1 -0
- package/dist/tools/tool-effect-profile.d.ts +44 -0
- package/dist/tools/tool-effect-profile.d.ts.map +1 -0
- package/dist/tools/tool-effect-profile.js +157 -0
- package/dist/tools/tool-effect-profile.js.map +1 -0
- package/dist/tools/tool-registry-types.d.ts +72 -0
- package/dist/tools/tool-registry-types.d.ts.map +1 -0
- package/dist/tools/tool-registry-types.js +9 -0
- package/dist/tools/tool-registry-types.js.map +1 -0
- package/dist/tools/tool-registry.d.ts +155 -0
- package/dist/tools/tool-registry.d.ts.map +1 -0
- package/dist/tools/tool-registry.js +599 -0
- package/dist/tools/tool-registry.js.map +1 -0
- package/dist/tools/tool-registry.schema.json +144 -0
- package/docs/ARCHITECTURE.md +259 -0
- package/docs/HOST_CONFORMANCE.md +210 -0
- package/docs/PROMPT_CONTRACT.md +123 -0
- package/docs/TOOL_EFFECT_PROFILE.md +77 -0
- package/docs/TOOL_REGISTRY_COMPARISON.md +358 -0
- package/package.json +76 -0
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Versioned task, run, checkpoint, and token-ledger persistence.
|
|
7
|
+
*/
|
|
8
|
+
import type { RunExecutionContext } from "./execution-context.js";
|
|
9
|
+
import type { PaginationRequest, PaginationResult } from "./pagination.js";
|
|
10
|
+
import type { PortResult } from "./port-result.js";
|
|
11
|
+
export type PersistenceRecord = Readonly<{
|
|
12
|
+
collection: string;
|
|
13
|
+
id: string;
|
|
14
|
+
revision: string;
|
|
15
|
+
value: unknown;
|
|
16
|
+
}>;
|
|
17
|
+
export type PersistenceListResult = Readonly<{
|
|
18
|
+
pagination: PaginationResult;
|
|
19
|
+
records: readonly PersistenceRecord[];
|
|
20
|
+
}>;
|
|
21
|
+
export interface PersistencePort {
|
|
22
|
+
readonly records: Readonly<{
|
|
23
|
+
upsert(input: Readonly<{
|
|
24
|
+
collection: string;
|
|
25
|
+
expectedRevision?: string;
|
|
26
|
+
id: string;
|
|
27
|
+
value: unknown;
|
|
28
|
+
}>, context: RunExecutionContext): Promise<PortResult<Readonly<{
|
|
29
|
+
id: string;
|
|
30
|
+
revision: string;
|
|
31
|
+
}>>>;
|
|
32
|
+
list(input: PaginationRequest & Readonly<{
|
|
33
|
+
collection: string;
|
|
34
|
+
}>, context: RunExecutionContext): Promise<PortResult<PersistenceListResult>>;
|
|
35
|
+
delete(input: Readonly<{
|
|
36
|
+
collection: string;
|
|
37
|
+
expectedRevision?: string;
|
|
38
|
+
id: string;
|
|
39
|
+
}>, context: RunExecutionContext): Promise<PortResult<Readonly<{
|
|
40
|
+
deleted: boolean;
|
|
41
|
+
}>>>;
|
|
42
|
+
}>;
|
|
43
|
+
readonly storage: Readonly<{
|
|
44
|
+
get(input: Readonly<{
|
|
45
|
+
key: string;
|
|
46
|
+
}>, context: RunExecutionContext): Promise<PortResult<Readonly<{
|
|
47
|
+
revision: string;
|
|
48
|
+
value: unknown;
|
|
49
|
+
}>>>;
|
|
50
|
+
set(input: Readonly<{
|
|
51
|
+
expectedRevision?: string;
|
|
52
|
+
key: string;
|
|
53
|
+
value: unknown;
|
|
54
|
+
}>, context: RunExecutionContext): Promise<PortResult<Readonly<{
|
|
55
|
+
revision: string;
|
|
56
|
+
}>>>;
|
|
57
|
+
}>;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=persistence-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-port.d.ts","sourceRoot":"","sources":["../../src/ports/persistence-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;CAChB,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,UAAU,EAAE,gBAAgB,CAAC;IAC7B,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;CACvC,CAAC,CAAC;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzB,MAAM,CACJ,KAAK,EAAE,QAAQ,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,EAAE,EAAE,MAAM,CAAC;YACX,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC,EACF,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC,CAAC;QACnE,IAAI,CACF,KAAK,EAAE,iBAAiB,GAAG,QAAQ,CAAC;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC,EAC3D,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,MAAM,CACJ,KAAK,EAAE,QAAQ,CAAC;YACd,UAAU,EAAE,MAAM,CAAC;YACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,EAAE,EAAE,MAAM,CAAC;SACZ,CAAC,EACF,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,OAAO,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC,CAAC;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC;QACzB,GAAG,CACD,KAAK,EAAE,QAAQ,CAAC;YAAE,GAAG,EAAE,MAAM,CAAA;SAAE,CAAC,EAChC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC,CAAC,CAAC;QACvE,GAAG,CACD,KAAK,EAAE,QAAQ,CAAC;YACd,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,GAAG,EAAE,MAAM,CAAC;YACZ,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC,EACF,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,QAAQ,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC,CAAC,CAAC;KACxD,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence-port.js","sourceRoot":"","sources":["../../src/ports/persistence-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-21
|
|
6
|
+
* @desc Discriminated result envelope used by every host port response.
|
|
7
|
+
*/
|
|
8
|
+
export type PortErrorCode = "ALREADY_EXISTS" | "APPROVAL_DENIED" | "APPROVAL_UNAVAILABLE" | "CANCELED" | "CAPABILITY_MISMATCH" | "CONFLICT" | "DEADLINE_EXCEEDED" | "INTERNAL" | "INVALID_INPUT" | "IO_ERROR" | "LIMIT_EXCEEDED" | "NOT_FOUND" | "PERMISSION_DENIED" | "PRECONDITION_FAILED" | "PROVIDER_ERROR" | "UNAVAILABLE" | "UNSUPPORTED";
|
|
9
|
+
export type PortError<TDetails = unknown> = Readonly<{
|
|
10
|
+
code: PortErrorCode;
|
|
11
|
+
details?: TDetails;
|
|
12
|
+
message: string;
|
|
13
|
+
retryable: boolean;
|
|
14
|
+
suggestedAction?: string;
|
|
15
|
+
}>;
|
|
16
|
+
export type PortSuccess<T> = Readonly<{
|
|
17
|
+
data: T;
|
|
18
|
+
ok: true;
|
|
19
|
+
}>;
|
|
20
|
+
export type PortFailure<TDetails = unknown> = Readonly<{
|
|
21
|
+
error: PortError<TDetails>;
|
|
22
|
+
ok: false;
|
|
23
|
+
}>;
|
|
24
|
+
export type PortResult<T, TDetails = unknown> = PortSuccess<T> | PortFailure<TDetails>;
|
|
25
|
+
export declare function portSuccess<T>(data: T): PortSuccess<T>;
|
|
26
|
+
export declare function portFailure<TDetails = unknown>(error: PortError<TDetails>): PortFailure<TDetails>;
|
|
27
|
+
export declare function isPortSuccess<T, TDetails>(result: PortResult<T, TDetails>): result is PortSuccess<T>;
|
|
28
|
+
export declare function isPortFailure<T, TDetails>(result: PortResult<T, TDetails>): result is PortFailure<TDetails>;
|
|
29
|
+
//# sourceMappingURL=port-result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-result.d.ts","sourceRoot":"","sources":["../../src/ports/port-result.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,aAAa,GACrB,gBAAgB,GAChB,iBAAiB,GACjB,sBAAsB,GACtB,UAAU,GACV,qBAAqB,GACrB,UAAU,GACV,mBAAmB,GACnB,UAAU,GACV,eAAe,GACf,UAAU,GACV,gBAAgB,GAChB,WAAW,GACX,mBAAmB,GACnB,qBAAqB,GACrB,gBAAgB,GAChB,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,MAAM,SAAS,CAAC,QAAQ,GAAG,OAAO,IAAI,QAAQ,CAAC;IACnD,IAAI,EAAE,aAAa,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,QAAQ,CAAC;IACpC,IAAI,EAAE,CAAC,CAAC;IACR,EAAE,EAAE,IAAI,CAAC;CACV,CAAC,CAAC;AAEH,MAAM,MAAM,WAAW,CAAC,QAAQ,GAAG,OAAO,IAAI,QAAQ,CAAC;IACrD,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3B,EAAE,EAAE,KAAK,CAAC;CACX,CAAC,CAAC;AAEH,MAAM,MAAM,UAAU,CAAC,CAAC,EAAE,QAAQ,GAAG,OAAO,IACxC,WAAW,CAAC,CAAC,CAAC,GACd,WAAW,CAAC,QAAQ,CAAC,CAAC;AAE1B,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAEtD;AAED,wBAAgB,WAAW,CAAC,QAAQ,GAAG,OAAO,EAC5C,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,GACzB,WAAW,CAAC,QAAQ,CAAC,CAEvB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EACvC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,GAC9B,MAAM,IAAI,WAAW,CAAC,CAAC,CAAC,CAE1B;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,QAAQ,EACvC,MAAM,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC,GAC9B,MAAM,IAAI,WAAW,CAAC,QAAQ,CAAC,CAEjC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-21
|
|
6
|
+
* @desc Discriminated result envelope used by every host port response.
|
|
7
|
+
*/
|
|
8
|
+
export function portSuccess(data) {
|
|
9
|
+
return Object.freeze({ ok: true, data });
|
|
10
|
+
}
|
|
11
|
+
export function portFailure(error) {
|
|
12
|
+
return Object.freeze({ ok: false, error: Object.freeze({ ...error }) });
|
|
13
|
+
}
|
|
14
|
+
export function isPortSuccess(result) {
|
|
15
|
+
return result.ok;
|
|
16
|
+
}
|
|
17
|
+
export function isPortFailure(result) {
|
|
18
|
+
return !result.ok;
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=port-result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port-result.js","sourceRoot":"","sources":["../../src/ports/port-result.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA2CH,MAAM,UAAU,WAAW,CAAI,IAAO;IACpC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,KAA0B;IAE1B,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA+B;IAE/B,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,MAA+B;IAE/B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Optional local frontend preview controller.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolExecutionContext } from "./execution-context.js";
|
|
9
|
+
import type { PortResult } from "./port-result.js";
|
|
10
|
+
export interface PreviewPort {
|
|
11
|
+
openLocalPreview(input: Readonly<{
|
|
12
|
+
command: string;
|
|
13
|
+
expectPort: number;
|
|
14
|
+
screenshot?: boolean;
|
|
15
|
+
waitMs?: number;
|
|
16
|
+
}>, context: ToolExecutionContext): Promise<PortResult<Readonly<{
|
|
17
|
+
screenshotArtifactId?: string;
|
|
18
|
+
sessionId: string;
|
|
19
|
+
url?: string;
|
|
20
|
+
}>>>;
|
|
21
|
+
cancelLocalPreview(input: Readonly<{
|
|
22
|
+
sessionId: string;
|
|
23
|
+
}>, context: ToolExecutionContext): Promise<PortResult<Readonly<{
|
|
24
|
+
canceled: boolean;
|
|
25
|
+
}>>>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=preview-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-port.d.ts","sourceRoot":"","sources":["../../src/ports/preview-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,WAAW;IAC1B,gBAAgB,CACd,KAAK,EAAE,QAAQ,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,EACF,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CACR,UAAU,CACR,QAAQ,CAAC;QACP,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC,CACH,CACF,CAAC;IACF,kBAAkB,CAChB,KAAK,EAAE,QAAQ,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,EACtC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC,CAAC,CAAC;CACzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview-port.js","sourceRoot":"","sources":["../../src/ports/preview-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Bounded external research whose content always remains untrusted data.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolExecutionContext } from "./execution-context.js";
|
|
9
|
+
import type { PaginationRequest, PaginationResult } from "./pagination.js";
|
|
10
|
+
import type { PortResult } from "./port-result.js";
|
|
11
|
+
export type ResearchSearchHit = Readonly<{
|
|
12
|
+
provider?: string;
|
|
13
|
+
snippet?: string;
|
|
14
|
+
title: string;
|
|
15
|
+
url: string;
|
|
16
|
+
}>;
|
|
17
|
+
export type ResearchExtractResult = Readonly<{
|
|
18
|
+
content: string;
|
|
19
|
+
contentSha256: string;
|
|
20
|
+
pagination: PaginationResult;
|
|
21
|
+
provider?: string;
|
|
22
|
+
trust: "untrusted_data";
|
|
23
|
+
url: string;
|
|
24
|
+
}>;
|
|
25
|
+
export interface ResearchPort {
|
|
26
|
+
search(input: PaginationRequest & Readonly<{
|
|
27
|
+
query: string;
|
|
28
|
+
}>, context: ToolExecutionContext): Promise<PortResult<Readonly<{
|
|
29
|
+
pagination: PaginationResult;
|
|
30
|
+
results: readonly ResearchSearchHit[];
|
|
31
|
+
trust: "untrusted_data";
|
|
32
|
+
}>>>;
|
|
33
|
+
extract(input: Readonly<{
|
|
34
|
+
cursor?: string;
|
|
35
|
+
extractDepth?: "basic" | "advanced";
|
|
36
|
+
maxBytes?: number;
|
|
37
|
+
url: string;
|
|
38
|
+
}>, context: ToolExecutionContext): Promise<PortResult<ResearchExtractResult>>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=research-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-port.d.ts","sourceRoot":"","sources":["../../src/ports/research-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;CACb,CAAC,CAAC;AAEH,MAAM,WAAW,YAAY;IAC3B,MAAM,CACJ,KAAK,EAAE,iBAAiB,GAAG,QAAQ,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,EACtD,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CACR,UAAU,CACR,QAAQ,CAAC;QACP,UAAU,EAAE,gBAAgB,CAAC;QAC7B,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAC;QACtC,KAAK,EAAE,gBAAgB,CAAC;KACzB,CAAC,CACH,CACF,CAAC;IACF,OAAO,CACL,KAAK,EAAE,QAAQ,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,YAAY,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,EACF,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC,CAAC;CAC/C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Bounded external research whose content always remains untrusted data.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=research-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"research-port.js","sourceRoot":"","sources":["../../src/ports/research-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Structured, correlated trace sink for deterministic replay and diagnostics.
|
|
7
|
+
*/
|
|
8
|
+
import type { RunExecutionContext } from "./execution-context.js";
|
|
9
|
+
import type { PortResult } from "./port-result.js";
|
|
10
|
+
export type TraceEventKind = "state_transition" | "tool_call" | "tool_result" | "token_ledger" | "context_diagnostic" | "checkpoint" | "prompt_snapshot" | "policy_decision" | "completion_gate";
|
|
11
|
+
export type TraceEvent = Readonly<{
|
|
12
|
+
eventId: string;
|
|
13
|
+
executionId: string;
|
|
14
|
+
kind: TraceEventKind;
|
|
15
|
+
payload: Readonly<Record<string, unknown>>;
|
|
16
|
+
runId: string;
|
|
17
|
+
sequence: number;
|
|
18
|
+
taskId: string;
|
|
19
|
+
timestamp: string;
|
|
20
|
+
}>;
|
|
21
|
+
export interface TracePort {
|
|
22
|
+
emit(event: TraceEvent, context: RunExecutionContext): Promise<PortResult<void>>;
|
|
23
|
+
/** Durably flush all accepted events through the current execution boundary. */
|
|
24
|
+
flush(context: RunExecutionContext): Promise<PortResult<void>>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=trace-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-port.d.ts","sourceRoot":"","sources":["../../src/ports/trace-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,cAAc,GACtB,kBAAkB,GAClB,WAAW,GACX,aAAa,GACb,cAAc,GACd,oBAAoB,GACpB,YAAY,GACZ,iBAAiB,GACjB,iBAAiB,GACjB,iBAAiB,CAAC;AAEtB,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,MAAM,WAAW,SAAS;IACxB,IAAI,CACF,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7B,gFAAgF;IAChF,KAAK,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;CAChE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Structured, correlated trace sink for deterministic replay and diagnostics.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=trace-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trace-port.js","sourceRoot":"","sources":["../../src/ports/trace-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Bounded workspace read ports and atomic, precondition-aware mutation ports.
|
|
7
|
+
*/
|
|
8
|
+
import type { ToolExecutionContext } from "./execution-context.js";
|
|
9
|
+
import type { PaginationRequest, PaginationResult } from "./pagination.js";
|
|
10
|
+
import type { PortResult } from "./port-result.js";
|
|
11
|
+
export type WorkspaceEntry = Readonly<{
|
|
12
|
+
kind: "file" | "directory" | "symlink" | "other";
|
|
13
|
+
name: string;
|
|
14
|
+
path: string;
|
|
15
|
+
}>;
|
|
16
|
+
export type WorkspaceListResult = Readonly<{
|
|
17
|
+
entries: readonly WorkspaceEntry[];
|
|
18
|
+
pagination: PaginationResult;
|
|
19
|
+
}>;
|
|
20
|
+
export type WorkspaceStatResult = Readonly<{
|
|
21
|
+
contentSha256?: string;
|
|
22
|
+
kind: "file" | "directory" | "symlink" | "missing" | "other";
|
|
23
|
+
mtimeMs?: number;
|
|
24
|
+
size?: number;
|
|
25
|
+
}>;
|
|
26
|
+
export type WorkspaceReadTextResult = Readonly<{
|
|
27
|
+
content: string;
|
|
28
|
+
contentSha256: string;
|
|
29
|
+
endLine: number;
|
|
30
|
+
pagination: PaginationResult;
|
|
31
|
+
path: string;
|
|
32
|
+
resolvedPath: string;
|
|
33
|
+
startLine: number;
|
|
34
|
+
truncated: boolean;
|
|
35
|
+
}>;
|
|
36
|
+
export type WorkspaceMutationPrecondition = Readonly<{
|
|
37
|
+
contentSha256: string;
|
|
38
|
+
kind: "matches_sha256";
|
|
39
|
+
}> | Readonly<{
|
|
40
|
+
kind: "must_not_exist";
|
|
41
|
+
}>;
|
|
42
|
+
export type WorkspaceMutationResult = Readonly<{
|
|
43
|
+
afterContentSha256?: string;
|
|
44
|
+
beforeContentSha256?: string;
|
|
45
|
+
path: string;
|
|
46
|
+
resolvedPath: string;
|
|
47
|
+
}>;
|
|
48
|
+
export type WorkspaceWriteTextResult = WorkspaceMutationResult & Readonly<{
|
|
49
|
+
afterContentSha256: string;
|
|
50
|
+
length: number;
|
|
51
|
+
}>;
|
|
52
|
+
export type WorkspaceApplyPatchResult = WorkspaceMutationResult & Readonly<{
|
|
53
|
+
afterContentSha256: string;
|
|
54
|
+
beforeContentSha256: string;
|
|
55
|
+
replacements: number;
|
|
56
|
+
}>;
|
|
57
|
+
export type WorkspaceSearchPathsResult = Readonly<{
|
|
58
|
+
matches: readonly string[];
|
|
59
|
+
pagination: PaginationResult;
|
|
60
|
+
}>;
|
|
61
|
+
export type WorkspaceSearchTextMatch = Readonly<{
|
|
62
|
+
column?: number;
|
|
63
|
+
contentSha256?: string;
|
|
64
|
+
line: number;
|
|
65
|
+
path: string;
|
|
66
|
+
preview: string;
|
|
67
|
+
}>;
|
|
68
|
+
export type WorkspaceSearchTextResult = Readonly<{
|
|
69
|
+
matches: readonly WorkspaceSearchTextMatch[];
|
|
70
|
+
pagination: PaginationResult;
|
|
71
|
+
}>;
|
|
72
|
+
export interface WorkspaceReaderPort {
|
|
73
|
+
listDir(input: PaginationRequest & Readonly<{
|
|
74
|
+
depth?: number;
|
|
75
|
+
path: string;
|
|
76
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceListResult>>;
|
|
77
|
+
stat(input: Readonly<{
|
|
78
|
+
path: string;
|
|
79
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceStatResult>>;
|
|
80
|
+
readText(input: Readonly<{
|
|
81
|
+
cursor?: string;
|
|
82
|
+
endLine?: number;
|
|
83
|
+
maxBytes?: number;
|
|
84
|
+
path: string;
|
|
85
|
+
startLine?: number;
|
|
86
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceReadTextResult>>;
|
|
87
|
+
searchPaths(input: PaginationRequest & Readonly<{
|
|
88
|
+
kind?: "file" | "directory";
|
|
89
|
+
mode?: "contains" | "glob" | "fuzzy";
|
|
90
|
+
path?: string;
|
|
91
|
+
query: string;
|
|
92
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceSearchPathsResult>>;
|
|
93
|
+
searchText(input: PaginationRequest & Readonly<{
|
|
94
|
+
caseSensitive?: boolean;
|
|
95
|
+
glob?: string;
|
|
96
|
+
path?: string;
|
|
97
|
+
query: string;
|
|
98
|
+
regex?: boolean;
|
|
99
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceSearchTextResult>>;
|
|
100
|
+
}
|
|
101
|
+
export interface WorkspaceWriterPort {
|
|
102
|
+
/** Must compare the precondition and commit the replacement atomically. */
|
|
103
|
+
applyPatch(input: Readonly<{
|
|
104
|
+
newText: string;
|
|
105
|
+
oldText: string;
|
|
106
|
+
path: string;
|
|
107
|
+
precondition: WorkspaceMutationPrecondition;
|
|
108
|
+
replaceAll?: boolean;
|
|
109
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceApplyPatchResult>>;
|
|
110
|
+
/** Must write via an atomic replace and enforce the precondition in the same operation. */
|
|
111
|
+
writeText(input: Readonly<{
|
|
112
|
+
content: string;
|
|
113
|
+
path: string;
|
|
114
|
+
precondition: WorkspaceMutationPrecondition;
|
|
115
|
+
}>, context: ToolExecutionContext): Promise<PortResult<WorkspaceWriteTextResult>>;
|
|
116
|
+
mkdir(input: Readonly<{
|
|
117
|
+
path: string;
|
|
118
|
+
recursive?: boolean;
|
|
119
|
+
}>, context: ToolExecutionContext): Promise<PortResult<Readonly<{
|
|
120
|
+
created: boolean;
|
|
121
|
+
path: string;
|
|
122
|
+
}>>>;
|
|
123
|
+
}
|
|
124
|
+
/** Convenience type for hosts that intentionally expose both capabilities. */
|
|
125
|
+
export type WorkspacePort = WorkspaceReaderPort & WorkspaceWriterPort;
|
|
126
|
+
//# sourceMappingURL=workspace-port.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-port.d.ts","sourceRoot":"","sources":["../../src/ports/workspace-port.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-28
|
|
6
|
+
* @desc Bounded workspace read ports and atomic, precondition-aware mutation ports.
|
|
7
|
+
*/
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=workspace-port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace-port.js","sourceRoot":"","sources":["../../src/ports/workspace-port.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/prompt/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @author Bùi Trọng Hiếu
|
|
3
|
+
* @email kevinbui210191@gmail.com
|
|
4
|
+
* @create date 2026-08-21
|
|
5
|
+
* @modify date 2026-08-21
|
|
6
|
+
* @desc Versioned modular prompt assembler. Static budget 8_000 tokens, dynamic modules cover workspace scope, task mode, and capability snapshot. SHA-256 hash of the assembled prompt.
|
|
7
|
+
*/
|
|
8
|
+
import type { ModelCapabilities } from "../ports/capability-port.js";
|
|
9
|
+
import type { AiCoderTaskMode } from "../ports/execution-context.js";
|
|
10
|
+
import type { AiCoderApprovalProfile } from "../tools/settings-types.js";
|
|
11
|
+
export declare const AI_CODER_PROMPT_VERSION = "ai-coder-single/2.5.0";
|
|
12
|
+
export declare const AI_CODER_STATIC_PROMPT_TOKEN_BUDGET = 8000;
|
|
13
|
+
export type { AiCoderTaskMode } from "../ports/execution-context.js";
|
|
14
|
+
export type AiCoderTaskComplexity = "simple" | "standard" | "complex";
|
|
15
|
+
export type AiCoderPromptAccess = "allowed" | "denied" | "policy_gated";
|
|
16
|
+
export type AiCoderCommandExecutionEnvironment = Readonly<{
|
|
17
|
+
argumentsPrefix: readonly string[];
|
|
18
|
+
commandMode: "shell_string";
|
|
19
|
+
executable: string;
|
|
20
|
+
interactive: false;
|
|
21
|
+
pathStyle: "posix" | "windows" | "unknown";
|
|
22
|
+
shell: "bash" | "cmd" | "fish" | "powershell" | "sh" | "unknown" | "zsh";
|
|
23
|
+
stdin: "closed";
|
|
24
|
+
tty: false;
|
|
25
|
+
}>;
|
|
26
|
+
export type AiCoderHostEnvironment = Readonly<{
|
|
27
|
+
architecture: string;
|
|
28
|
+
command: AiCoderCommandExecutionEnvironment;
|
|
29
|
+
operatingSystem: "darwin" | "linux" | "win32" | "unknown";
|
|
30
|
+
}>;
|
|
31
|
+
export type AiCoderPromptModule = Readonly<{
|
|
32
|
+
content: string;
|
|
33
|
+
estimatedTokens: number;
|
|
34
|
+
id: string;
|
|
35
|
+
kind: "dynamic" | "static";
|
|
36
|
+
priority: number;
|
|
37
|
+
version: string;
|
|
38
|
+
}>;
|
|
39
|
+
export type AiCoderPromptSnapshot = Readonly<{
|
|
40
|
+
estimatedTokens: number;
|
|
41
|
+
moduleVersions: Readonly<Record<string, string>>;
|
|
42
|
+
modules: readonly AiCoderPromptModule[];
|
|
43
|
+
promptHash: string;
|
|
44
|
+
promptVersion: string;
|
|
45
|
+
staticEstimatedTokens: number;
|
|
46
|
+
systemPrompt: string;
|
|
47
|
+
}>;
|
|
48
|
+
export type AiCoderTaskContract = Readonly<{
|
|
49
|
+
acceptanceCriteria: readonly Readonly<{
|
|
50
|
+
id: string;
|
|
51
|
+
inferred: boolean;
|
|
52
|
+
required: boolean;
|
|
53
|
+
text: string;
|
|
54
|
+
}>[];
|
|
55
|
+
complexity: AiCoderTaskComplexity;
|
|
56
|
+
constraints: readonly string[];
|
|
57
|
+
mode: AiCoderTaskMode;
|
|
58
|
+
normalizedOutcome: string;
|
|
59
|
+
originalRequest: string;
|
|
60
|
+
taskId: string;
|
|
61
|
+
workspacePath: string | null;
|
|
62
|
+
}>;
|
|
63
|
+
export type AiCoderUntrustedPromptData = Readonly<{
|
|
64
|
+
content: string;
|
|
65
|
+
contentHash?: string;
|
|
66
|
+
source: string;
|
|
67
|
+
trust: "untrusted_data";
|
|
68
|
+
}>;
|
|
69
|
+
export type AiCoderTrustedWorkspaceInstruction = Readonly<{
|
|
70
|
+
content: string;
|
|
71
|
+
contentHash?: string;
|
|
72
|
+
source: string;
|
|
73
|
+
}>;
|
|
74
|
+
/** Host-owned prompt inputs. Runtime-owned fields are deliberately absent. */
|
|
75
|
+
export type AiCoderPromptConfiguration = Readonly<{
|
|
76
|
+
approvalProfile: AiCoderApprovalProfile;
|
|
77
|
+
complexity: AiCoderTaskComplexity;
|
|
78
|
+
dirtyStateSummary?: string;
|
|
79
|
+
hostEnvironment?: AiCoderHostEnvironment;
|
|
80
|
+
networkAccess: AiCoderPromptAccess;
|
|
81
|
+
trustedWorkspaceInstructions?: readonly AiCoderTrustedWorkspaceInstruction[];
|
|
82
|
+
writeAccess: AiCoderPromptAccess;
|
|
83
|
+
}>;
|
|
84
|
+
export type AiCoderPromptAssemblerOptions = AiCoderPromptConfiguration & Readonly<{
|
|
85
|
+
capabilities: ModelCapabilities;
|
|
86
|
+
mode: AiCoderTaskMode;
|
|
87
|
+
registrySnapshotHash: string;
|
|
88
|
+
taskId: string;
|
|
89
|
+
workspacePath: string | null;
|
|
90
|
+
}>;
|
|
91
|
+
export declare function createAiCoderTaskContract(input: Readonly<{
|
|
92
|
+
acceptanceCriteria?: readonly (string | Readonly<{
|
|
93
|
+
id: string;
|
|
94
|
+
required?: boolean;
|
|
95
|
+
text: string;
|
|
96
|
+
}>)[];
|
|
97
|
+
complexity: string;
|
|
98
|
+
constraints?: readonly string[];
|
|
99
|
+
mode: string;
|
|
100
|
+
normalizedOutcome?: string;
|
|
101
|
+
originalRequest: string;
|
|
102
|
+
taskId: string;
|
|
103
|
+
workspacePath: string | null;
|
|
104
|
+
}>): AiCoderTaskContract;
|
|
105
|
+
export declare function formatAiCoderUserTask(contract: AiCoderTaskContract, attachmentContext?: string | readonly AiCoderUntrustedPromptData[]): string;
|
|
106
|
+
export declare function assembleAiCoderPrompt(options: AiCoderPromptAssemblerOptions): Promise<AiCoderPromptSnapshot>;
|
|
107
|
+
export declare function buildAiCoderReflection(input: Readonly<{
|
|
108
|
+
avoid: string;
|
|
109
|
+
evidence: string | AiCoderUntrustedPromptData;
|
|
110
|
+
failure: string;
|
|
111
|
+
nextStrategy: string;
|
|
112
|
+
rootCause: string;
|
|
113
|
+
}>): string;
|
|
114
|
+
//# sourceMappingURL=prompt-assembler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-assembler.d.ts","sourceRoot":"","sources":["../../src/prompt/prompt-assembler.ts"],"names":[],"mappings":"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"}
|