@kindgi/cli 0.1.4-rc.0 → 0.1.4-rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (107) hide show
  1. package/README.md +26 -12
  2. package/dist/cli.js +5 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/agents.d.ts +11 -1
  5. package/dist/commands/agents.d.ts.map +1 -1
  6. package/dist/commands/agents.js +318 -38
  7. package/dist/commands/agents.js.map +1 -1
  8. package/dist/commands/conversations.d.ts.map +1 -1
  9. package/dist/commands/conversations.js +72 -17
  10. package/dist/commands/conversations.js.map +1 -1
  11. package/dist/commands/deploy.d.ts.map +1 -1
  12. package/dist/commands/deploy.js.map +1 -1
  13. package/dist/commands/dev.d.ts.map +1 -1
  14. package/dist/commands/dev.js +129 -28
  15. package/dist/commands/dev.js.map +1 -1
  16. package/dist/commands/eval-runs.d.ts.map +1 -1
  17. package/dist/commands/eval-runs.js +85 -30
  18. package/dist/commands/eval-runs.js.map +1 -1
  19. package/dist/commands/flows.d.ts.map +1 -1
  20. package/dist/commands/flows.js +84 -25
  21. package/dist/commands/flows.js.map +1 -1
  22. package/dist/commands/gate-policies.d.ts +3 -0
  23. package/dist/commands/gate-policies.d.ts.map +1 -0
  24. package/dist/commands/gate-policies.js +118 -0
  25. package/dist/commands/gate-policies.js.map +1 -0
  26. package/dist/commands/helpers.d.ts +8 -0
  27. package/dist/commands/helpers.d.ts.map +1 -1
  28. package/dist/commands/helpers.js +13 -0
  29. package/dist/commands/helpers.js.map +1 -1
  30. package/dist/commands/index.d.ts.map +1 -1
  31. package/dist/commands/index.js +4 -0
  32. package/dist/commands/index.js.map +1 -1
  33. package/dist/commands/judge-classes.d.ts.map +1 -1
  34. package/dist/commands/judge-classes.js +64 -7
  35. package/dist/commands/judge-classes.js.map +1 -1
  36. package/dist/commands/memory.d.ts.map +1 -1
  37. package/dist/commands/memory.js +70 -12
  38. package/dist/commands/memory.js.map +1 -1
  39. package/dist/commands/projects.d.ts +3 -0
  40. package/dist/commands/projects.d.ts.map +1 -0
  41. package/dist/commands/projects.js +53 -0
  42. package/dist/commands/projects.js.map +1 -0
  43. package/dist/commands/provenance.d.ts.map +1 -1
  44. package/dist/commands/provenance.js +66 -14
  45. package/dist/commands/provenance.js.map +1 -1
  46. package/dist/commands/runs.d.ts.map +1 -1
  47. package/dist/commands/runs.js +44 -3
  48. package/dist/commands/runs.js.map +1 -1
  49. package/dist/commands/tools.d.ts.map +1 -1
  50. package/dist/commands/tools.js +28 -38
  51. package/dist/commands/tools.js.map +1 -1
  52. package/dist/commands/unwired.d.ts +4 -2
  53. package/dist/commands/unwired.d.ts.map +1 -1
  54. package/dist/commands/unwired.js +38 -11
  55. package/dist/commands/unwired.js.map +1 -1
  56. package/dist/context.d.ts +3 -3
  57. package/dist/context.d.ts.map +1 -1
  58. package/dist/dev/defaults.d.ts +16 -7
  59. package/dist/dev/defaults.d.ts.map +1 -1
  60. package/dist/dev/defaults.js +130 -34
  61. package/dist/dev/defaults.js.map +1 -1
  62. package/dist/dev/port.d.ts +27 -0
  63. package/dist/dev/port.d.ts.map +1 -0
  64. package/dist/dev/port.js +67 -0
  65. package/dist/dev/port.js.map +1 -0
  66. package/dist/dev/python-builder.d.ts +10 -1
  67. package/dist/dev/python-builder.d.ts.map +1 -1
  68. package/dist/dev/python-builder.js +21 -6
  69. package/dist/dev/python-builder.js.map +1 -1
  70. package/dist/dev/runners.d.ts +11 -0
  71. package/dist/dev/runners.d.ts.map +1 -1
  72. package/dist/dev/runtime-env.d.ts +6 -0
  73. package/dist/dev/runtime-env.d.ts.map +1 -1
  74. package/dist/dev/runtime-env.js +1 -0
  75. package/dist/dev/runtime-env.js.map +1 -1
  76. package/dist/dev/runtime-image.d.ts +1 -1
  77. package/dist/dev/runtime-image.js +1 -1
  78. package/dist/dev/shared-watch.d.ts +25 -0
  79. package/dist/dev/shared-watch.d.ts.map +1 -0
  80. package/dist/dev/shared-watch.js +111 -0
  81. package/dist/dev/shared-watch.js.map +1 -0
  82. package/dist/errors.d.ts.map +1 -1
  83. package/dist/errors.js +14 -3
  84. package/dist/errors.js.map +1 -1
  85. package/dist/help.js +1 -1
  86. package/dist/help.js.map +1 -1
  87. package/dist/parse.d.ts +3 -1
  88. package/dist/parse.d.ts.map +1 -1
  89. package/dist/parse.js.map +1 -1
  90. package/dist/sdk-skills/kindgi-authoring-agents/SKILL.md +1 -1
  91. package/dist/sdk-skills/kindgi-authoring-flows/SKILL.md +1 -1
  92. package/dist/sdk-skills/kindgi-authoring-guardrails/SKILL.md +1 -1
  93. package/dist/sdk-skills/kindgi-authoring-mcp-servers/SKILL.md +1 -1
  94. package/dist/sdk-skills/kindgi-authoring-providers/SKILL.md +1 -1
  95. package/dist/sdk-skills/kindgi-authoring-tools/SKILL.md +1 -1
  96. package/dist/sdk-skills/kindgi-framework-feedback/SKILL.md +1 -1
  97. package/dist/sdk-skills/kindgi-getting-started/SKILL.md +3 -3
  98. package/dist/sdk-skills/kindgi-python-authoring-agents/SKILL.md +1 -1
  99. package/dist/sdk-skills/kindgi-python-authoring-flows/SKILL.md +1 -1
  100. package/dist/sdk-skills/kindgi-python-authoring-guardrails/SKILL.md +1 -1
  101. package/dist/sdk-skills/kindgi-python-authoring-tools/SKILL.md +1 -1
  102. package/dist/sdk-skills/kindgi-python-getting-started/SKILL.md +1 -1
  103. package/dist/stop-signal.d.ts +41 -7
  104. package/dist/stop-signal.d.ts.map +1 -1
  105. package/dist/stop-signal.js +39 -4
  106. package/dist/stop-signal.js.map +1 -1
  107. package/package.json +11 -10
@@ -17,7 +17,7 @@ description: >
17
17
  type: core
18
18
  library: "kindgi (Python)"
19
19
  version: "0.1.1"
20
- sdk_version: "0.1.4-rc.0"
20
+ sdk_version: "0.1.4-rc.2"
21
21
  pack_languages: [python]
22
22
  sources:
23
23
  - sdks/python/src/kindgi/pack/define.py
@@ -15,7 +15,7 @@ description: >
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
17
  version: "0.1.1"
18
- sdk_version: "0.1.4-rc.0"
18
+ sdk_version: "0.1.4-rc.2"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/src/kindgi/pack/define.py
@@ -15,7 +15,7 @@ description: >
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
17
  version: "0.1.1"
18
- sdk_version: "0.1.4-rc.0"
18
+ sdk_version: "0.1.4-rc.2"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/src/kindgi/pack/define.py
@@ -15,7 +15,7 @@ description: >
15
15
  type: core
16
16
  library: "kindgi (Python)"
17
17
  version: "0.1.5"
18
- sdk_version: "0.1.4-rc.0"
18
+ sdk_version: "0.1.4-rc.2"
19
19
  pack_languages: [python]
20
20
  sources:
21
21
  - sdks/python/README.md
@@ -1,15 +1,49 @@
1
1
  /**
2
- * SIGINT / SIGTERM → an AbortSignal long-lived commands (`kindgi dev`)
3
- * watch to shut down cleanly: close watchers, stop the api-server, tear
4
- * down the bundled containers.
2
+ * SIGINT / SIGTERM / SIGHUP → an AbortSignal long-lived commands
3
+ * (`kindgi dev`) watch to shut down cleanly: close watchers, stop the
4
+ * api-server, tear down the bundled containers. SIGHUP is the terminal
5
+ * closing: without a listener it ended `kindgi dev` at once, leaving its
6
+ * runtime container running.
5
7
  *
6
8
  * The listener stays registered (`on`, never `once`), so a dependency
7
9
  * that re-raises a signal when it finds itself the only listener left
8
- * (`signal-exit` v3 does) can't cut the graceful shutdown short. A second
9
- * signal forces the exit, the usual Ctrl+C-twice contract.
10
+ * (`signal-exit` v3 does) can't cut the graceful shutdown short.
11
+ *
12
+ * A second Ctrl+C forces the exit, the usual Ctrl+C-twice contract, but
13
+ * not one that comes with the first. One Ctrl+C can arrive more than once:
14
+ * the terminal signals the whole foreground process group, and a wrapper
15
+ * in it signals its child too (`npx` and `pnpm run` forward SIGINT;
16
+ * `pnpm exec` sends SIGTERM and exits at once). A signal is the same
17
+ * Ctrl+C when it's handled within `REPEAT_SIGNAL_WINDOW_MS` of the first,
18
+ * or before the event loop has turned twice since: a stop step can hold
19
+ * the loop (closing a recursive file watcher takes over a second on
20
+ * macOS), so a signal that came at once can be handled late. A SIGTERM
21
+ * or SIGHUP never forces the exit; it asks for the stop already under
22
+ * way. Forcing it left the runtime container running.
10
23
  */
24
+ type StopSignalName = 'SIGINT' | 'SIGTERM' | 'SIGHUP';
11
25
  export interface SignalSource {
12
- on(event: 'SIGINT' | 'SIGTERM', listener: () => void): unknown;
26
+ on(event: StopSignalName, listener: () => void): unknown;
27
+ }
28
+ /** Where the stop signal reads the time and the event loop's turns (tests fake it). */
29
+ export interface StopSignalClock {
30
+ now(): number;
31
+ /** Run `fn` on the event loop's next turn. */
32
+ nextTurn(fn: () => void): void;
33
+ }
34
+ /** How long after the first signal another is still the same Ctrl+C. */
35
+ export declare const REPEAT_SIGNAL_WINDOW_MS = 500;
36
+ export declare function createStopSignal(source: SignalSource, forceExit: (code: number) => void, clock?: StopSignalClock): AbortSignal;
37
+ /** Where the command's output goes (`process.stdout`, `process.stderr`). */
38
+ export interface OutputStream {
39
+ on(event: 'error', listener: (error: Error) => void): unknown;
13
40
  }
14
- export declare function createStopSignal(source: SignalSource, forceExit: (code: number) => void): AbortSignal;
41
+ /**
42
+ * After a hangup (SIGHUP: the terminal closed), writing to the terminal
43
+ * fails (EIO). Unheard, that error would end the process mid-stop, the
44
+ * runtime container left behind, so from then on the outputs' errors are
45
+ * ignored: nobody is left to read them.
46
+ */
47
+ export declare function ignoreOutputAfterHangup(source: SignalSource, outputs: readonly OutputStream[]): void;
48
+ export {};
15
49
  //# sourceMappingURL=stop-signal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop-signal.d.ts","sourceRoot":"","sources":["../src/stop-signal.ts"],"names":[],"mappings":"AAGA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CAChE;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAChC,WAAW,CAYb"}
1
+ {"version":3,"file":"stop-signal.d.ts","sourceRoot":"","sources":["../src/stop-signal.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,KAAK,cAAc,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEtD,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;CAC1D;AAED,uFAAuF;AACvF,MAAM,WAAW,eAAe;IAC9B,GAAG,IAAI,MAAM,CAAC;IACd,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;CAChC;AAED,wEAAwE;AACxE,eAAO,MAAM,uBAAuB,MAAM,CAAC;AAS3C,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EACjC,KAAK,GAAE,eAA6B,GACnC,WAAW,CAuBb;AAED,4EAA4E;AAC5E,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC;CAC/D;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,SAAS,YAAY,EAAE,GAC/B,IAAI,CAON"}
@@ -1,16 +1,51 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // Copyright (C) 2026 Kindgi Inc.
3
- export function createStopSignal(source, forceExit) {
3
+ /** How long after the first signal another is still the same Ctrl+C. */
4
+ export const REPEAT_SIGNAL_WINDOW_MS = 500;
5
+ const systemClock = {
6
+ now: () => Date.now(),
7
+ nextTurn: (fn) => {
8
+ setImmediate(fn);
9
+ },
10
+ };
11
+ export function createStopSignal(source, forceExit, clock = systemClock) {
4
12
  const controller = new AbortController();
5
- const onSignal = () => {
13
+ let firstAt = 0;
14
+ let settled = false;
15
+ const onSignal = (signal) => {
6
16
  if (!controller.signal.aborted) {
17
+ firstAt = clock.now();
18
+ clock.nextTurn(() => clock.nextTurn(() => {
19
+ settled = true;
20
+ }));
7
21
  controller.abort();
8
22
  return;
9
23
  }
24
+ if (signal !== 'SIGINT')
25
+ return;
26
+ if (!settled || clock.now() - firstAt < REPEAT_SIGNAL_WINDOW_MS)
27
+ return;
10
28
  forceExit(130);
11
29
  };
12
- source.on('SIGINT', onSignal);
13
- source.on('SIGTERM', onSignal);
30
+ source.on('SIGINT', () => onSignal('SIGINT'));
31
+ source.on('SIGTERM', () => onSignal('SIGTERM'));
32
+ source.on('SIGHUP', () => onSignal('SIGHUP'));
14
33
  return controller.signal;
15
34
  }
35
+ /**
36
+ * After a hangup (SIGHUP: the terminal closed), writing to the terminal
37
+ * fails (EIO). Unheard, that error would end the process mid-stop, the
38
+ * runtime container left behind, so from then on the outputs' errors are
39
+ * ignored: nobody is left to read them.
40
+ */
41
+ export function ignoreOutputAfterHangup(source, outputs) {
42
+ let hungUp = false;
43
+ source.on('SIGHUP', () => {
44
+ if (hungUp)
45
+ return;
46
+ hungUp = true;
47
+ for (const output of outputs)
48
+ output.on('error', () => undefined);
49
+ });
50
+ }
16
51
  //# sourceMappingURL=stop-signal.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stop-signal.js","sourceRoot":"","sources":["../src/stop-signal.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAiBjC,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,SAAiC;IAEjC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,GAAS,EAAE;QAC1B,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC9B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC"}
1
+ {"version":3,"file":"stop-signal.js","sourceRoot":"","sources":["../src/stop-signal.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAuCjC,wEAAwE;AACxE,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C,MAAM,WAAW,GAAoB;IACnC,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;IACrB,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE;QACf,YAAY,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;CACF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAC9B,MAAoB,EACpB,SAAiC,EACjC,QAAyB,WAAW;IAEpC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,QAAQ,GAAG,CAAC,MAAsB,EAAQ,EAAE;QAChD,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,OAAO,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;YACtB,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAClB,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE;gBAClB,OAAO,GAAG,IAAI,CAAC;YACjB,CAAC,CAAC,CACH,CAAC;YACF,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QACD,IAAI,MAAM,KAAK,QAAQ;YAAE,OAAO;QAChC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,uBAAuB;YAAE,OAAO;QACxE,SAAS,CAAC,GAAG,CAAC,CAAC;IACjB,CAAC,CAAC;IACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;IAChD,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC9C,OAAO,UAAU,CAAC,MAAM,CAAC;AAC3B,CAAC;AAOD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAoB,EACpB,OAAgC;IAEhC,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;QACvB,IAAI,MAAM;YAAE,OAAO;QACnB,MAAM,GAAG,IAAI,CAAC;QACd,KAAK,MAAM,MAAM,IAAI,OAAO;YAAE,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kindgi/cli",
3
- "version": "0.1.4-rc.0",
3
+ "version": "0.1.4-rc.2",
4
4
  "description": "Command-line interface for Kindgi™ — the sovereign AI OS. Create a pack, run it on your machine (`kindgi dev`), build, sign and deploy it, and work with a running Kindgi API from the terminal.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -37,15 +37,16 @@
37
37
  "provenance": true
38
38
  },
39
39
  "dependencies": {
40
- "@kindgi/client": "0.1.4-rc.0",
41
- "@kindgi/dotenv-file": "0.1.4-rc.0",
42
- "@kindgi/crypto": "0.1.4-rc.0",
43
- "@kindgi/env-schema": "0.1.4-rc.0",
44
- "@kindgi/handler-runtime": "0.1.4-rc.0",
45
- "@kindgi/secrets-dotenv": "0.1.4-rc.0",
46
- "@kindgi/platform": "0.1.4-rc.0",
47
- "@kindgi/sdk": "0.1.4-rc.0",
48
- "@kindgi/types": "0.1.4-rc.0",
40
+ "@kindgi/client": "0.1.4-rc.2",
41
+ "@kindgi/dotenv-file": "0.1.4-rc.2",
42
+ "@kindgi/crypto": "0.1.4-rc.2",
43
+ "@kindgi/env-schema": "0.1.4-rc.2",
44
+ "@kindgi/flow": "0.1.4-rc.2",
45
+ "@kindgi/handler-runtime": "0.1.4-rc.2",
46
+ "@kindgi/secrets-dotenv": "0.1.4-rc.2",
47
+ "@kindgi/platform": "0.1.4-rc.2",
48
+ "@kindgi/sdk": "0.1.4-rc.2",
49
+ "@kindgi/types": "0.1.4-rc.2",
49
50
  "esbuild": "^0.24.0",
50
51
  "semver": "^7.8.5",
51
52
  "smol-toml": "^1.9.0",