@javargasm/pi-kiro 0.2.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/CHANGELOG.md +63 -0
- package/LICENSE +21 -0
- package/README.md +119 -0
- package/dist/core.d.ts +10 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +2849 -0
- package/dist/debug.d.ts +12 -0
- package/dist/debug.d.ts.map +1 -0
- package/dist/event-parser.d.ts +56 -0
- package/dist/event-parser.d.ts.map +1 -0
- package/dist/extension.d.ts +43 -0
- package/dist/extension.d.ts.map +1 -0
- package/dist/extension.js +2940 -0
- package/dist/health.d.ts +6 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/kiro-cli-sync.d.ts +44 -0
- package/dist/kiro-cli-sync.d.ts.map +1 -0
- package/dist/kiro-defaults.d.ts +25 -0
- package/dist/kiro-defaults.d.ts.map +1 -0
- package/dist/kiro-tools.d.ts +4 -0
- package/dist/kiro-tools.d.ts.map +1 -0
- package/dist/models.d.ts +122 -0
- package/dist/models.d.ts.map +1 -0
- package/dist/oauth.d.ts +48 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/stream.d.ts +20 -0
- package/dist/stream.d.ts.map +1 -0
- package/dist/thinking-parser.d.ts +24 -0
- package/dist/thinking-parser.d.ts.map +1 -0
- package/dist/tokenizer.d.ts +2 -0
- package/dist/tokenizer.d.ts.map +1 -0
- package/dist/transform.d.ts +113 -0
- package/dist/transform.d.ts.map +1 -0
- package/package.json +79 -0
package/dist/health.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../src/health.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAGzD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface KiroCliCredentials {
|
|
2
|
+
accessToken: string;
|
|
3
|
+
refreshToken: string;
|
|
4
|
+
clientId?: string;
|
|
5
|
+
clientSecret?: string;
|
|
6
|
+
region: string;
|
|
7
|
+
profileArn?: string;
|
|
8
|
+
authMethod: "idc" | "desktop";
|
|
9
|
+
email?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Attempt to read credentials from Kiro IDE's local database.
|
|
13
|
+
*
|
|
14
|
+
* Returns the first valid credential set found, or null if:
|
|
15
|
+
* - Kiro IDE is not installed
|
|
16
|
+
* - The database is unreadable
|
|
17
|
+
* - No valid tokens are stored
|
|
18
|
+
*
|
|
19
|
+
* This function never throws — all errors are caught and logged.
|
|
20
|
+
*/
|
|
21
|
+
export declare function importFromKiroCli(): Promise<KiroCliCredentials | null>;
|
|
22
|
+
/**
|
|
23
|
+
* Attempt to read credentials from Kiro IDE's local database WITHOUT checking
|
|
24
|
+
* token expiry. This is the last-resort fallback: the access token is probably
|
|
25
|
+
* stale, but the refresh token might still be valid for one more exchange.
|
|
26
|
+
*
|
|
27
|
+
* Returns null if the DB doesn't exist, is unreadable, or has no tokens at all.
|
|
28
|
+
* Never throws.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getKiroCliCredentialsAllowExpired(): Promise<KiroCliCredentials | null>;
|
|
31
|
+
/**
|
|
32
|
+
* Write refreshed credentials back to Kiro IDE's local SQLite database.
|
|
33
|
+
*
|
|
34
|
+
* This enables bidirectional sync: when pi-kiro refreshes a token, the new
|
|
35
|
+
* credentials are persisted back to the Kiro CLI DB so both tools stay in sync.
|
|
36
|
+
*
|
|
37
|
+
* The function updates the FIRST `:token` entry found in `auth_kv` — matching
|
|
38
|
+
* the same read pattern used by `importFromKiroCli`.
|
|
39
|
+
*
|
|
40
|
+
* Never throws — all errors are caught and logged. A failed write-back is
|
|
41
|
+
* non-fatal; the refreshed token is still valid in memory.
|
|
42
|
+
*/
|
|
43
|
+
export declare function saveKiroCliCredentials(creds: KiroCliCredentials): Promise<boolean>;
|
|
44
|
+
//# sourceMappingURL=kiro-cli-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-cli-sync.d.ts","sourceRoot":"","sources":["../src/kiro-cli-sync.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,KAAK,GAAG,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsDD;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAqH5E;AAED;;;;;;;GAOG;AACH,wBAAsB,iCAAiC,IAAI,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAO5F;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CA0ExF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthetic history seed injected at the start of every conversation.
|
|
3
|
+
* The real Kiro CLI sends this exact pair before real history.
|
|
4
|
+
* Use `{{modelId}}` placeholder — replaced at runtime with the dot-format model id.
|
|
5
|
+
*/
|
|
6
|
+
export declare const SYSTEM_SEED_INSTRUCTION: string;
|
|
7
|
+
export declare const SYSTEM_SEED_ACK: string;
|
|
8
|
+
/**
|
|
9
|
+
* Every tool schema in the real Kiro CLI includes this extra property.
|
|
10
|
+
* Injected by `convertToolsToKiro()` into each tool's input schema.
|
|
11
|
+
*/
|
|
12
|
+
export declare const TOOL_PURPOSE_FIELD: {
|
|
13
|
+
readonly type: "string";
|
|
14
|
+
readonly description: "A brief explanation why you are making this tool use.";
|
|
15
|
+
};
|
|
16
|
+
/** Map `process.platform` to Kiro's `operatingSystem` values. */
|
|
17
|
+
export declare function resolveOS(): string;
|
|
18
|
+
/**
|
|
19
|
+
* Context usage percentage at which pi-kiro forces Pi's overflow detection.
|
|
20
|
+
* When Kiro reports >= this value, `usage.input` is inflated above
|
|
21
|
+
* `contextWindow` so Pi's `isContextOverflow()` returns true and triggers
|
|
22
|
+
* compaction before hitting a 413.
|
|
23
|
+
*/
|
|
24
|
+
export declare const COMPACTION_THRESHOLD_PCT = 95;
|
|
25
|
+
//# sourceMappingURL=kiro-defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-defaults.d.ts","sourceRoot":"","sources":["../src/kiro-defaults.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,QAKG,CAAC;AAExC,eAAO,MAAM,eAAe,QAE0D,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,kBAAkB;;;CAGrB,CAAC;AAEX,iEAAiE;AACjE,wBAAgB,SAAS,IAAI,MAAM,CASlC;AAED;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kiro-tools.d.ts","sourceRoot":"","sources":["../src/kiro-tools.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,6CAA6C;AAC7C,eAAO,MAAM,iBAAiB,EAAE,YAAY,EA6jB3C,CAAC"}
|
package/dist/models.d.ts
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/** Canonical Kiro API IDs (dot form) accepted by the server. */
|
|
2
|
+
export declare const KIRO_MODEL_IDS: Set<string>;
|
|
3
|
+
/** Convert pi's dash form to the Kiro API's dot form (e.g. 4-6 → 4.6). */
|
|
4
|
+
export declare function dashToDot(modelId: string): string;
|
|
5
|
+
/** Convert Kiro API's dot form to pi's dash form (e.g. 4.6 → 4-6). */
|
|
6
|
+
export declare function dotToDash(modelId: string): string;
|
|
7
|
+
/** Convert pi's dash form to the Kiro API's dot form (e.g. 4-6 → 4.6). */
|
|
8
|
+
export declare function resolveKiroModel(modelId: string): string;
|
|
9
|
+
export declare function resolveApiRegion(ssoRegion: string | undefined): string;
|
|
10
|
+
export declare function filterModelsByRegion<T extends {
|
|
11
|
+
id: string;
|
|
12
|
+
}>(models: T[], apiRegion: string): T[];
|
|
13
|
+
export declare function resolveRuntimeUrl(apiRegion: string): string;
|
|
14
|
+
type Input = ("text" | "image")[];
|
|
15
|
+
export interface KiroModel {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
api: "kiro-api";
|
|
19
|
+
provider: "kiro";
|
|
20
|
+
baseUrl: string;
|
|
21
|
+
reasoning: boolean;
|
|
22
|
+
input: Input;
|
|
23
|
+
cost: {
|
|
24
|
+
input: number;
|
|
25
|
+
output: number;
|
|
26
|
+
cacheRead: number;
|
|
27
|
+
cacheWrite: number;
|
|
28
|
+
};
|
|
29
|
+
contextWindow: number;
|
|
30
|
+
maxTokens: number;
|
|
31
|
+
/** Optional per-model override for the first-token timeout (ms). */
|
|
32
|
+
firstTokenTimeout?: number;
|
|
33
|
+
/**
|
|
34
|
+
* Upstream is expected to hide reasoning from clients — tags and
|
|
35
|
+
* native reasoning events should be absent. When set:
|
|
36
|
+
*
|
|
37
|
+
* - The `<thinking_mode>` system-prompt directive is skipped
|
|
38
|
+
* (the provider ignores it for these models).
|
|
39
|
+
* - A redacted-thinking breadcrumb is emitted lazily — only if
|
|
40
|
+
* no content or tool-call arrives within
|
|
41
|
+
* `HIDDEN_REASONING_COUNTDOWN_MS`. Fast responses emit no
|
|
42
|
+
* thinking block; slow responses get a single "Reasoning
|
|
43
|
+
* hidden by provider" marker so downstream UIs can surface
|
|
44
|
+
* "the model is deliberating" during the server-side wait.
|
|
45
|
+
*
|
|
46
|
+
* Does NOT gate the ThinkingTagParser — that runs unconditionally
|
|
47
|
+
* when `reasoning` is enabled. The adaptive-thinking policy is
|
|
48
|
+
* advisory: some models (Opus 4.7) intermittently leak
|
|
49
|
+
* `<thinking>...</thinking>` tags inline, and the parser handles
|
|
50
|
+
* them correctly when they do arrive.
|
|
51
|
+
*
|
|
52
|
+
* Applies to Claude Opus 4.7, which flipped Anthropic's
|
|
53
|
+
* adaptive-thinking default from "summarized" to "omitted".
|
|
54
|
+
* See https://docs.anthropic.com/en/docs/build-with-claude/adaptive-thinking
|
|
55
|
+
*/
|
|
56
|
+
reasoningHidden?: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Effort levels supported by this model for adaptive thinking.
|
|
59
|
+
* Sourced from `ListAvailableModels` → `additionalModelRequestFieldsSchema`.
|
|
60
|
+
* When present, the effort is sent via `additionalModelRequestFields.output_config.effort`
|
|
61
|
+
* in the GenerateAssistantResponse request body.
|
|
62
|
+
*/
|
|
63
|
+
supportedEfforts?: string[];
|
|
64
|
+
/** Whether the model supports `thinking` block configuration. */
|
|
65
|
+
supportsThinkingConfig?: boolean;
|
|
66
|
+
}
|
|
67
|
+
export declare const kiroModels: KiroModel[];
|
|
68
|
+
export interface KiroApiModel {
|
|
69
|
+
modelId: string;
|
|
70
|
+
modelName: string;
|
|
71
|
+
tokenLimits?: {
|
|
72
|
+
maxInputTokens?: number;
|
|
73
|
+
maxOutputTokens?: number;
|
|
74
|
+
};
|
|
75
|
+
supportedInputTypes?: string[];
|
|
76
|
+
/** Schema for extra fields accepted by GenerateAssistantResponse. */
|
|
77
|
+
additionalModelRequestFieldsSchema?: {
|
|
78
|
+
properties?: {
|
|
79
|
+
output_config?: {
|
|
80
|
+
properties?: {
|
|
81
|
+
effort?: {
|
|
82
|
+
enum?: string[];
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
thinking?: {
|
|
87
|
+
properties?: {
|
|
88
|
+
type?: {
|
|
89
|
+
enum?: string[];
|
|
90
|
+
};
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
};
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Fetch the list of models actually available for this account from Kiro.
|
|
98
|
+
* Filters out "auto" — it appears in ListAvailableModels but is rejected
|
|
99
|
+
* by GenerateAssistantResponse with INVALID_MODEL_ID.
|
|
100
|
+
*/
|
|
101
|
+
export declare function fetchAvailableModels(accessToken: string, apiRegion: string): Promise<KiroApiModel[]>;
|
|
102
|
+
export interface KiroModelDef {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
reasoning: boolean;
|
|
106
|
+
input: ("text" | "image")[];
|
|
107
|
+
contextWindow: number;
|
|
108
|
+
maxTokens: number;
|
|
109
|
+
firstTokenTimeout?: number;
|
|
110
|
+
reasoningHidden?: boolean;
|
|
111
|
+
supportedEfforts?: string[];
|
|
112
|
+
supportsThinkingConfig?: boolean;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Build pi model definitions from the Kiro ListAvailableModels API response.
|
|
116
|
+
* Adds any new model IDs dynamically to KIRO_MODEL_IDS so resolveKiroModel passes.
|
|
117
|
+
*/
|
|
118
|
+
export declare function buildModelsFromApi(apiModels: KiroApiModel[]): KiroModelDef[];
|
|
119
|
+
export declare function getCachedDynamicModels(): KiroModelDef[] | null;
|
|
120
|
+
export declare function setCachedDynamicModels(models: KiroModelDef[] | null): void;
|
|
121
|
+
export {};
|
|
122
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../src/models.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth.d.ts
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { OAuthCredentials, OAuthLoginCallbacks } from "@earendil-works/pi-ai";
|
|
2
|
+
export declare const BUILDER_ID_START_URL = "https://view.awsapps.com/start";
|
|
3
|
+
export declare const BUILDER_ID_REGION = "us-east-1";
|
|
4
|
+
export declare const SSO_SCOPES: string[];
|
|
5
|
+
export interface KiroCredentials extends OAuthCredentials {
|
|
6
|
+
clientId: string;
|
|
7
|
+
/**
|
|
8
|
+
* OIDC client secret from AWS SSO-OIDC client registration.
|
|
9
|
+
*
|
|
10
|
+
* SENSITIVE: persist only in secure storage (e.g. keychain, encrypted
|
|
11
|
+
* file, HTTP-only cookie). Do not log, do not send to telemetry, do not
|
|
12
|
+
* embed in URLs or query strings. Together with `refresh`, it can mint
|
|
13
|
+
* new access tokens for the user's AWS identity.
|
|
14
|
+
*/
|
|
15
|
+
clientSecret: string;
|
|
16
|
+
region: string;
|
|
17
|
+
/**
|
|
18
|
+
* Which SSO flow produced this credential.
|
|
19
|
+
* - `builder-id`: AWS Builder ID (personal AWS account, us-east-1).
|
|
20
|
+
* - `idc`: IAM Identity Center (enterprise SSO, any region).
|
|
21
|
+
* - `desktop`: Kiro IDE native install (bare refresh token, no clientId/clientSecret).
|
|
22
|
+
*/
|
|
23
|
+
authMethod: "builder-id" | "idc" | "desktop";
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Interactive login. Asks the user to pick Builder ID, IdC, or Desktop,
|
|
27
|
+
* then runs the appropriate flow.
|
|
28
|
+
*
|
|
29
|
+
* Uses `callbacks.onPrompt`, which is the path pi's login-dialog is wired
|
|
30
|
+
* to. Escape/ctrl+c rejects the promise with "Login cancelled", propagating
|
|
31
|
+
* out of this function automatically.
|
|
32
|
+
*/
|
|
33
|
+
export declare function loginKiro(callbacks: OAuthLoginCallbacks): Promise<KiroCredentials>;
|
|
34
|
+
/**
|
|
35
|
+
* 5-layer credential refresh cascade.
|
|
36
|
+
*
|
|
37
|
+
* Layers (each falls through to the next on failure):
|
|
38
|
+
* 1. Normal OIDC/desktop refresh with current credentials
|
|
39
|
+
* 2. Import fresh credentials from Kiro CLI DB → use as-is
|
|
40
|
+
* 3. Import fresh credentials from Kiro CLI DB → refresh those
|
|
41
|
+
* 4. Import expired credentials from Kiro CLI DB → use as-is
|
|
42
|
+
* 5. Import expired credentials from Kiro CLI DB → refresh those
|
|
43
|
+
*
|
|
44
|
+
* After any successful refresh, the new tokens are synced back to the
|
|
45
|
+
* Kiro CLI DB (fire-and-forget) for bidirectional sync.
|
|
46
|
+
*/
|
|
47
|
+
export declare function refreshKiroToken(credentials: OAuthCredentials): Promise<KiroCredentials>;
|
|
48
|
+
//# sourceMappingURL=oauth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../src/oauth.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAWnF,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAC7C,eAAO,MAAM,UAAU,UAMtB,CAAC;AAmBF,MAAM,WAAW,eAAgB,SAAQ,gBAAgB;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf;;;;;OAKG;IACH,UAAU,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;CAC9C;AA2ID;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAAC,SAAS,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC,CAsDxF;AAsSD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,gBAAgB,GAC5B,OAAO,CAAC,eAAe,CAAC,CAgH1B"}
|
package/dist/stream.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Api, AssistantMessageEventStream, Context, Model, SimpleStreamOptions } from "@earendil-works/pi-ai";
|
|
2
|
+
/**
|
|
3
|
+
* How long to wait after `start` before emitting the lazy
|
|
4
|
+
* hidden-reasoning breadcrumb. Short enough that the marker appears
|
|
5
|
+
* exactly when a wait starts feeling palpable, long enough that fast
|
|
6
|
+
* responses never flash it. Content / tool-call events cancel the
|
|
7
|
+
* timer, so the breadcrumb only fires when nothing else arrives in
|
|
8
|
+
* time.
|
|
9
|
+
*/
|
|
10
|
+
export declare const HIDDEN_REASONING_COUNTDOWN_MS = 2000;
|
|
11
|
+
/**
|
|
12
|
+
* Reset cache state. Pass `skipResolution: true` to disable profileArn lookup
|
|
13
|
+
* entirely (useful for tests that don't mock ListAvailableProfiles).
|
|
14
|
+
* Production code should never pass true — cache is reset on logout/refresh
|
|
15
|
+
* without disabling resolution.
|
|
16
|
+
*/
|
|
17
|
+
export declare function resetProfileArnCache(skipResolution?: boolean): void;
|
|
18
|
+
export declare function resolveProfileArn(accessToken: string, endpoint: string): Promise<string | undefined>;
|
|
19
|
+
export declare function streamKiro(model: Model<Api>, context: Context, options?: SimpleStreamOptions): AssistantMessageEventStream;
|
|
20
|
+
//# sourceMappingURL=stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../src/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,GAAG,EAEH,2BAA2B,EAC3B,OAAO,EAEP,KAAK,EACL,mBAAmB,EAKpB,MAAM,uBAAuB,CAAC;AA4F/B;;;;;;;GAOG;AACH,eAAO,MAAM,6BAA6B,OAAO,CAAC;AA+DlD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,cAAc,UAAQ,GAAG,IAAI,CAGjE;AAED,wBAAsB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAuC1G;AA2PD,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,EACjB,OAAO,EAAE,OAAO,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,2BAA2B,CAk1B7B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { AssistantMessage, AssistantMessageEventStream } from "@earendil-works/pi-ai";
|
|
2
|
+
export declare const THINKING_START_TAG = "<thinking>";
|
|
3
|
+
export declare const THINKING_END_TAG = "</thinking>";
|
|
4
|
+
export declare class ThinkingTagParser {
|
|
5
|
+
private output;
|
|
6
|
+
private stream;
|
|
7
|
+
private textBuffer;
|
|
8
|
+
private inThinking;
|
|
9
|
+
private thinkingExtracted;
|
|
10
|
+
private thinkingBlockIndex;
|
|
11
|
+
private textBlockIndex;
|
|
12
|
+
private lastTextBlockIndex;
|
|
13
|
+
private activeEndTag;
|
|
14
|
+
constructor(output: AssistantMessage, stream: AssistantMessageEventStream);
|
|
15
|
+
processChunk(chunk: string): void;
|
|
16
|
+
finalize(): void;
|
|
17
|
+
getTextBlockIndex(): number | null;
|
|
18
|
+
private processBeforeThinking;
|
|
19
|
+
private processInsideThinking;
|
|
20
|
+
private processAfterThinking;
|
|
21
|
+
private emitText;
|
|
22
|
+
private emitThinking;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=thinking-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"thinking-parser.d.ts","sourceRoot":"","sources":["../src/thinking-parser.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,2BAA2B,EAAgC,MAAM,uBAAuB,CAAC;AAGzH,eAAO,MAAM,kBAAkB,eAAe,CAAC;AAC/C,eAAO,MAAM,gBAAgB,gBAAgB,CAAC;AA0B9C,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,MAAM;IAVhB,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,kBAAkB,CAAuB;IACjD,OAAO,CAAC,YAAY,CAA4B;gBAGtC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,2BAA2B;IAG7C,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IA4BjC,QAAQ,IAAI,IAAI;IAkChB,iBAAiB,IAAI,MAAM,GAAG,IAAI;IAIlC,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,qBAAqB;IAmC7B,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,YAAY;CA6BrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenizer.d.ts","sourceRoot":"","sources":["../src/tokenizer.ts"],"names":[],"mappings":"AAKA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGhD"}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import type { ImageContent, Message, Tool } from "@earendil-works/pi-ai";
|
|
2
|
+
/** Drop assistant messages that ended in error/aborted — partial turns
|
|
3
|
+
* shouldn't be replayed. */
|
|
4
|
+
export declare function normalizeMessages(messages: Message[]): Message[];
|
|
5
|
+
export interface KiroImage {
|
|
6
|
+
format: string;
|
|
7
|
+
source: {
|
|
8
|
+
bytes: string;
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface KiroToolUse {
|
|
12
|
+
name: string;
|
|
13
|
+
toolUseId: string;
|
|
14
|
+
input: Record<string, unknown>;
|
|
15
|
+
}
|
|
16
|
+
export interface KiroToolResult {
|
|
17
|
+
content: Array<{
|
|
18
|
+
text: string;
|
|
19
|
+
}>;
|
|
20
|
+
status: "success" | "error";
|
|
21
|
+
toolUseId: string;
|
|
22
|
+
}
|
|
23
|
+
export interface KiroToolSpec {
|
|
24
|
+
toolSpecification: {
|
|
25
|
+
name: string;
|
|
26
|
+
description: string;
|
|
27
|
+
inputSchema: {
|
|
28
|
+
json: Record<string, unknown>;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
export interface KiroEnvState {
|
|
33
|
+
operatingSystem: string;
|
|
34
|
+
currentWorkingDirectory: string;
|
|
35
|
+
}
|
|
36
|
+
export interface KiroUserInputMessage {
|
|
37
|
+
content: string;
|
|
38
|
+
modelId?: string;
|
|
39
|
+
origin: "KIRO_CLI";
|
|
40
|
+
images?: KiroImage[];
|
|
41
|
+
userInputMessageContext?: {
|
|
42
|
+
envState?: KiroEnvState;
|
|
43
|
+
toolResults?: KiroToolResult[];
|
|
44
|
+
tools?: KiroToolSpec[];
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
export interface KiroAssistantResponseMessage {
|
|
48
|
+
content: string;
|
|
49
|
+
toolUses?: KiroToolUse[];
|
|
50
|
+
}
|
|
51
|
+
export interface KiroHistoryEntry {
|
|
52
|
+
userInputMessage?: KiroUserInputMessage;
|
|
53
|
+
assistantResponseMessage?: KiroAssistantResponseMessage;
|
|
54
|
+
}
|
|
55
|
+
export declare const TOOL_RESULT_LIMIT = 250000;
|
|
56
|
+
/** Maximum images per message accepted by the Kiro API. */
|
|
57
|
+
export declare const MAX_KIRO_IMAGES = 4;
|
|
58
|
+
/** Maximum decoded size per image (bytes) accepted by the Kiro API. */
|
|
59
|
+
export declare const MAX_KIRO_IMAGE_BYTES = 3750000;
|
|
60
|
+
/** Middle-ellipsis truncation: preserve start and end. */
|
|
61
|
+
export declare function truncate(text: string, limit: number): string;
|
|
62
|
+
export declare function extractImages(msg: Message): ImageContent[];
|
|
63
|
+
export declare function getContentText(msg: Message): string;
|
|
64
|
+
/**
|
|
65
|
+
* Parse tool-call arguments defensively. Historical messages (including
|
|
66
|
+
* those from other providers via cross-provider handoff) may carry args
|
|
67
|
+
* that aren't valid JSON. Fall back to {} rather than crashing the stream.
|
|
68
|
+
*/
|
|
69
|
+
export declare function parseToolArgs(input: unknown): Record<string, unknown>;
|
|
70
|
+
/**
|
|
71
|
+
* Kiro accepts its own compact `tooluse_*` IDs in replayed history. Other
|
|
72
|
+
* providers / harness layers can produce IDs such as `call_...|fc_...`, which
|
|
73
|
+
* Kiro rejects as `Invalid tool use format`. Canonicalize only the wire-format
|
|
74
|
+
* ID while preserving deterministic toolUse/toolResult matching.
|
|
75
|
+
*/
|
|
76
|
+
export declare function toKiroToolUseId(id: string): string;
|
|
77
|
+
export declare function convertToolsToKiro(tools: Tool[]): KiroToolSpec[];
|
|
78
|
+
/**
|
|
79
|
+
* Convert images to Kiro wire format, enforcing API limits:
|
|
80
|
+
* - Max {@link MAX_KIRO_IMAGES} images per call
|
|
81
|
+
* - Max {@link MAX_KIRO_IMAGE_BYTES} decoded bytes per image
|
|
82
|
+
*
|
|
83
|
+
* Oversized/excess images are silently dropped and counted in `omitted`.
|
|
84
|
+
*/
|
|
85
|
+
export declare function convertImagesToKiro(images: Array<{
|
|
86
|
+
mimeType: string;
|
|
87
|
+
data: string;
|
|
88
|
+
}>): {
|
|
89
|
+
images: KiroImage[];
|
|
90
|
+
omitted: number;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Split messages into history + current turn. The current turn is the trailing
|
|
94
|
+
* user message (+ any following tool results) or the trailing assistant
|
|
95
|
+
* message when it carries tool calls. Everything before goes into history.
|
|
96
|
+
*
|
|
97
|
+
* System prompt is prepended to the first user message in history, not sent
|
|
98
|
+
* as a separate field (Kiro doesn't have one).
|
|
99
|
+
*/
|
|
100
|
+
export declare function buildHistory(messages: Message[], _modelId: string, systemPrompt?: string): {
|
|
101
|
+
history: KiroHistoryEntry[];
|
|
102
|
+
systemPrepended: boolean;
|
|
103
|
+
currentMsgStartIdx: number;
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Collapse consecutive tool-use loops in history. When the agent calls
|
|
107
|
+
* tools N times in sequence (ASST(toolUses) → USER(toolResults) pairs),
|
|
108
|
+
* keep text only on the first assistant message and replace subsequent
|
|
109
|
+
* ones with a short placeholder. This prevents the model from re-deriving
|
|
110
|
+
* its preamble on every iteration, saving context tokens.
|
|
111
|
+
*/
|
|
112
|
+
export declare function collapseAgenticLoops(history: KiroHistoryEntry[]): KiroHistoryEntry[];
|
|
113
|
+
//# sourceMappingURL=transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@javargasm/pi-kiro",
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"description": "Kiro provider for the pi coding agent: AWS Builder ID / IAM Identity Center login and the CodeWhisperer streaming API, exposing the Kiro Claude model family.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/javargasm/pi-kiro.git"
|
|
10
|
+
},
|
|
11
|
+
"homepage": "https://github.com/javargasm/pi-kiro#readme",
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/javargasm/pi-kiro/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"pi-package",
|
|
17
|
+
"pi",
|
|
18
|
+
"pi-coding-agent",
|
|
19
|
+
"extension",
|
|
20
|
+
"provider",
|
|
21
|
+
"kiro",
|
|
22
|
+
"aws",
|
|
23
|
+
"codewhisperer",
|
|
24
|
+
"amazon-q",
|
|
25
|
+
"claude"
|
|
26
|
+
],
|
|
27
|
+
"pi": {
|
|
28
|
+
"extensions": [
|
|
29
|
+
"./dist/extension.js"
|
|
30
|
+
]
|
|
31
|
+
},
|
|
32
|
+
"main": "./dist/extension.js",
|
|
33
|
+
"types": "./dist/extension.d.ts",
|
|
34
|
+
"exports": {
|
|
35
|
+
".": {
|
|
36
|
+
"types": "./dist/extension.d.ts",
|
|
37
|
+
"import": "./dist/extension.js"
|
|
38
|
+
},
|
|
39
|
+
"./core": {
|
|
40
|
+
"types": "./dist/core.d.ts",
|
|
41
|
+
"import": "./dist/core.js"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"files": [
|
|
45
|
+
"dist",
|
|
46
|
+
"README.md",
|
|
47
|
+
"CHANGELOG.md"
|
|
48
|
+
],
|
|
49
|
+
"scripts": {
|
|
50
|
+
"clean": "rm -rf dist",
|
|
51
|
+
"build:js": "bun build src/extension.ts src/core.ts --outdir dist --target node --format esm --external '@earendil-works/*'",
|
|
52
|
+
"build:types": "tsc -p tsconfig.build.json",
|
|
53
|
+
"build": "bun run clean && bun run build:js && bun run build:types",
|
|
54
|
+
"typecheck": "tsc --noEmit",
|
|
55
|
+
"test": "vitest run",
|
|
56
|
+
"test:watch": "vitest",
|
|
57
|
+
"check": "bun run typecheck && bun run test",
|
|
58
|
+
"changeset": "changeset",
|
|
59
|
+
"version": "changeset version",
|
|
60
|
+
"publish:dry-run": "npm publish --dry-run",
|
|
61
|
+
"prepack": "bun run build",
|
|
62
|
+
"prepublishOnly": "bun run check"
|
|
63
|
+
},
|
|
64
|
+
"devDependencies": {
|
|
65
|
+
"@changesets/changelog-github": "^0.5.0",
|
|
66
|
+
"@changesets/cli": "^2.27.0",
|
|
67
|
+
"@earendil-works/pi-ai": "^0.78.1",
|
|
68
|
+
"@types/bun": "latest",
|
|
69
|
+
"vitest": "^2.0.0"
|
|
70
|
+
},
|
|
71
|
+
"peerDependencies": {
|
|
72
|
+
"typescript": "^5",
|
|
73
|
+
"@earendil-works/pi-ai": "*"
|
|
74
|
+
},
|
|
75
|
+
"publishConfig": {
|
|
76
|
+
"access": "public",
|
|
77
|
+
"provenance": true
|
|
78
|
+
}
|
|
79
|
+
}
|